在使用 Laravel DB:Query Builder 时,有没有办法获取模型对象而不是 stdClass 对象?
Is there any way to get model object instead of stdClass object while using Laravel DB:Query Builder?
在下面的代码中,我试图获取附近的用户和距离。一切正常。但是下面的查询 returns 结果是 stdClass 对象 但我想要用户 模型对象 。可能吗?
$collection = DB::table('users')
->join('locations as l', 'users.location_id', '=', 'l.id')
->select('users.*', DB::raw('(6371 * acos(cos(radians(' . $coordinates['latitude'] . ')) * cos(radians(`lat`)) * cos(radians(`lng`) - radians(' . $coordinates['longitude'] . ')) + sin(radians(' . $coordinates['latitude'] . ')) * sin(radians(`lat`)))) as distances'))
->having('distances', '<', 32.688888)
->orderBy('distances', 'ASC')
->get();
输出:
Illuminate\Support\Collection Object
(
[items:protected] => Array
(
[0] => stdClass Object
(
)
)
)
我要
Illuminate\Support\Collection Object
(
[items:protected] => Array
(
[0] => App\Models\User Object
(
)
)
)
这是因为您使用的是查询生成器而不是模型。
您应该能够通过以下方式实现您的目标:
$collection = User::join('locations as l', 'users.location_id', '=', 'l.id')
->select('users.*', DB::raw('(6371 * acos(cos(radians(' . $coordinates['latitude'] . ')) * cos(radians(`lat`)) * cos(radians(`lng`) - radians(' . $coordinates['longitude'] . ')) + sin(radians(' . $coordinates['latitude'] . ')) * sin(radians(`lat`)))) as distances'))
->having('distances', '<', 32.688888)
->orderBy('distances', 'ASC')
->get();
在下面的代码中,我试图获取附近的用户和距离。一切正常。但是下面的查询 returns 结果是 stdClass 对象 但我想要用户 模型对象 。可能吗?
$collection = DB::table('users')
->join('locations as l', 'users.location_id', '=', 'l.id')
->select('users.*', DB::raw('(6371 * acos(cos(radians(' . $coordinates['latitude'] . ')) * cos(radians(`lat`)) * cos(radians(`lng`) - radians(' . $coordinates['longitude'] . ')) + sin(radians(' . $coordinates['latitude'] . ')) * sin(radians(`lat`)))) as distances'))
->having('distances', '<', 32.688888)
->orderBy('distances', 'ASC')
->get();
输出:
Illuminate\Support\Collection Object
(
[items:protected] => Array
(
[0] => stdClass Object
(
)
)
)
我要
Illuminate\Support\Collection Object
(
[items:protected] => Array
(
[0] => App\Models\User Object
(
)
)
)
这是因为您使用的是查询生成器而不是模型。
您应该能够通过以下方式实现您的目标:
$collection = User::join('locations as l', 'users.location_id', '=', 'l.id')
->select('users.*', DB::raw('(6371 * acos(cos(radians(' . $coordinates['latitude'] . ')) * cos(radians(`lat`)) * cos(radians(`lng`) - radians(' . $coordinates['longitude'] . ')) + sin(radians(' . $coordinates['latitude'] . ')) * sin(radians(`lat`)))) as distances'))
->having('distances', '<', 32.688888)
->orderBy('distances', 'ASC')
->get();