Есть ли способ получить объект модели вместо объекта stdClass при использовании Laravel DB: Query Builder? - PullRequest
0 голосов
/ 07 сентября 2018

В приведенном ниже коде я пытался получить соседних пользователей и расстояния. Все работает хорошо. Но приведенный ниже запрос возвращает результаты в виде объекта 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
                    (

                    )
             )
    )

1 Ответ

0 голосов
/ 07 сентября 2018

Это потому, что вы используете построитель запросов вместо модели.

Вы должны быть в состоянии достичь того, что вы хотите, с помощью следующего:

$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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...