Сгруппируйте свойство нескольких столбцов в один вложенный объект в Laravel - PullRequest
1 голос
/ 21 марта 2020

У меня есть построитель запросов, который возвращает объединенную таблицу с выбранными столбцами. Мне удалось выбрать нужные столбцы, но я хочу сгруппировать некоторые столбцы в свойство объекта.

Вот результат, который я получаю сейчас.

{
    "id": 2,
    "name": "Khalid Kuhlman",
    "email": "P2eoZ6.georgianna.krajcik@example.org",
    "longitude": 114.782468,
    "latitude": -8.204574,
    "created_at": "2020-03-20T15:22:37.000000Z"
}

Это то, что я ожидал

{
    "id": 2,
    "name": "Khalid Kuhlman",
    "email": "P2eoZ6.georgianna.krajcik@example.org",
    "coordinate": {
        "longitude": 114.782468,
        "latitude": -8.204574
    },
    "created_at": "2020-03-20T15:22:37.000000Z"
}

Вот мой конструктор запросов.

    $agents = Agent::leftJoin('users', 'users.id', 'agents.id');

    $agents = $agents->select(['agents.id',
                               'users.name',
                               'users.email',
                               // DB::raw('(SELECT * FROM (
                               //             SELECT X(`users`.`last_position`) AS longitude,
                               //                    Y(`users`.`last_position`) AS latitude
                               //             FROM `users`) position
                               //           ) AS coordinate'),
                               DB::raw('X(`users`.`last_position`) AS longitude'),
                               DB::raw('Y(`users`.`last_position`) AS latitude'),
                               'agents.created_at']);

    if (! empty($q)) {
        $agents = $agents->where('users.name', 'like', "%{$q}%");
    }


    if (! empty($sortBy)) {
        $agents = $agents->orderBy($sortBy, $orderBy);
    }

    $agents = $agents->paginate($perPage);

Как видите, прокомментированный раздел - это то, что я пытаюсь сделать, чтобы сгруппировать столбцы, но, похоже, мне не повезло с этим.

...