[英]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.