Laravel 5:将查询生成器转换为 eloquent
Laravel 5: Convert query builder to eloquent
有没有办法将此查询生成器转换为 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();
}
因为无法使用查询生成器 return 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,则无法设置
作为模型中的属性存在的访问器。
例如:
getIdAttribute
永远不会被调用,因为已经有
$model->attributes['id']
.
如果您改为定义 getHumanCreatedAtAttribute
,它将被称为
因为没有$model->attributes['human_created_at']
有没有办法将此查询生成器转换为 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();
}
因为无法使用查询生成器 return 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,则无法设置 作为模型中的属性存在的访问器。
例如:
getIdAttribute
永远不会被调用,因为已经有
$model->attributes['id']
.
如果您改为定义 getHumanCreatedAtAttribute
,它将被称为
因为没有$model->attributes['human_created_at']