簡體   English   中英

Laravel 5:將查詢生成器轉換為雄辯的

[英]Laravel 5: Convert query builder to eloquent

有沒有辦法將此查詢生成器轉換為雄辯的?

$users = DB::table('connections')
        ->join('locations','connections.to_user','=','locations.user_id')
        ->join('users','connections.to_user','=','users.id')
        ->select(
            DB::raw("*, IF((
                    3959 * acos(
                    cos(radians(".$lat."))
                    * cos(radians(latitude))
                            * cos(radians(longitude) - radians(".$lng."))
                            + sin(radians(".$lat."))
                            * sin(radians(latitude)))
                    ) < ".$distance.",true,false) near,(
                    3959 * acos(
                    cos(radians(".$lat."))
                    * cos(radians(latitude))
                            * cos(radians(longitude) - radians(".$lng."))
                            + sin(radians(".$lat."))
                            * sin(radians(latitude)))
                    ) AS distance")
        )
        ->where('status',3)
        ->orderBy("distance")
        ->get();

連接型號

public function getCreatedAtAttribute()
{
  return \Carbon\Carbon::parse($this->attributes['created_at'])->diffForHumans();
}

因為無法使用查詢生成器在Carbon的“ diffForHumans”中返回created_at屬性。

如果您只需要Carbon::diffForHumans ,則可以將created_at轉換(鑄造)為Carbon。

一些可能的用法:

  • $dt = ( (Carbon) $row->created_at ) // Casting
  • $dt = Carbon::instance($row->created_at)

我建議保留Fluent查詢,而不要轉換為Eloquent,因為Eloquent實際上僅適用於簡單的CRUD和簡單的關系。

希望這可以幫助 :)

編輯更多示例:

/* $rows = (Fluent queries)->get() */

foreach ($rows as $row) {
    $row['created_at'] = Carbon::parse($row['created_at']);
}

如果要繼續使用Fluent,請使用上述版本。

如果出於任何原因堅持使用Eloquent,則無法設置在模型中作為屬性存在的訪問器。

例如:

因為已經有了$model->attributes['id']所以永遠不會調用getIdAttribute

相反,如果您定義一個getHumanCreatedAtAttribute ,它將被稱為
因為沒有$model->attributes['human_created_at']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM