Массив с одним атрибутом отношения Eloquent со многими ко многим - PullRequest
0 голосов
/ 12 февраля 2019

Я создал модель NearMiss, которая имеет отношение многих ко многим с моделью Type.Когда есть запрос GET для определенного NearMiss, я хочу, чтобы к выводу JSON был присоединен массив, который имеет атрибут name всех экземпляров Type, принадлежащих экземпляру NearMiss.

Я могу прикрепить массив типов к выводу, но я хочу избавиться от всей дополнительной информации (такой как сводная информация).

Запрос GET /nearmisses/{nearmiss} выполняет следующий метод:

public function show($id) 
    {
        try {
            $nearmiss = NearMiss::findOrFail($id)->first();
            $nearmiss->types->makeHidden(['id', 'created_at', 'updated_at']);
            return response()->json($nearmiss);
        } catch(ModelNotFoundException $e) {
            abort(400, 'Model not found');
        }
    }

Модель NearMiss имеет отношение следующих типов:

public function types() 
    {
        return $this->belongsToMany('App\Type', 'near_miss_type', 'near_miss_id', 'type_id');
    }

Токовый выход:

{
    "id": 1,
    "location_long": "0.0000000",
    "location_lat": "0.0000000",
    "employee_id": 1,
    "created_at": "2019-02-11 16:38:24",
    "updated_at": "2019-02-11 16:38:24",
    "types": [
        {
            "id": 1,
            "name": "Brandgevaar"
            "created_at": "2019-02-11 16:33:25",
            "updated_at": "2019-02-11 16:33:25",
        },
        {
            "id": 2,
            "name": "Slipgevaar",
            "created_at": "2019-02-11 16:34:12",
            "updated_at": "2019-02-11 16:34:12",
        }
    ]
}

Я знаю, что могу удалить дополнительные атрибуты (такие какid, creation_at, updated_at), но это все еще оставляет меня с массивом Type экземпляров (только с одним атрибутом имени).Когда я пытаюсь flatten(), я получаю сообщение об ошибке, которое flatten() не может использоваться в отношениях BelongsToMany.

Желаемый результат:

{
    "id": 1,
    "location_long": "0.0000000",
    "location_lat": "0.0000000",
    "employee_id": 1,
    "created_at": "2019-02-11 16:38:24",
    "updated_at": "2019-02-11 16:38:24",
    "types": [
        "Brandgevaar", "Slipgevaar"
    ]
}

Может ли кто-нибудь помочь мне получить желаемый результатпожалуйста.

1 Ответ

0 голосов
/ 12 февраля 2019

Вы можете загрузить типы вручную и использовать функцию pluck(), чтобы получить только имя каждого типа.

$nearmiss->types = $nearmiss->types()->pluck('name');

Однако я не уверен, что это помешаетс магическими свойствами от Eloquent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...