在使用 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();