Laravel Eloquent ID в качестве ключа массива - PullRequest
0 голосов
/ 11 мая 2018

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

Я использую следующий фрагмент:

public function edit(Special $special)
{
   dd($special->with('restaurants')->with('cuisines')->get()->keyBy('id')->toArray());
}

Это производит:

enter image description here

-> keyBy ('id') метод позволяет мне установить «Специальный» ключ массива в качестве идентификатора записи в базе данных.

Однако я не могу понять, как установить ключи массива записи отношений вих соответствующие идентификаторы.

Например,Первый элемент в массиве ресторанов должен иметь ключ «1».Первый элемент в массиве кухонь должен иметь ключ «25».

Я пробовал что-то вроде этого:

$special->with('restaurants')->keyBy('id')->with('cuisines')->keyBy('id')->get()->keyBy('id')->toArray()

, который выдает: Метод Illuminate \ Database \ Query \ Builder :: keyBy не существует.

В моей таблице кухонь и ресторанов есть столбец идентификатора первичного ключа.

Ответы [ 3 ]

0 голосов
/ 11 мая 2018
 $result = $special->with(['restaurants', 'cuisines'])->get()
        ->keyBy('id')
        ->map(function ($item) {
        $item->restaurants->keyBy('id');
        $item->cuisines->keyBy('id');
        return $item;
    });
0 голосов
/ 11 мая 2018

Используйте это:

$special->with($relations = ['restaurants', 'cuisines'])->get()->keyBy('id')
    ->each(function($special) use($relations) {
        foreach($relations as $relation) {
            $special->setRelation($relation, $special->$relation->keyBy('id'));        
        }
    });
0 голосов
/ 11 мая 2018

Это должно сработать:

$result = $special->with(['restaurants', 'cuisines'])->get()->keyBy('id')->map(function ($item) {
    $item->restaurants->keyBy('id');
    $item->cuisines->keyBy('id');

    return $item;
});

Или чуть лучшая версия:

$result = $special->with(['restaurants', 'cuisines'])->get()->keyBy('id')->map(function ($item) {
    foreach (array_keys($item->getRelations()) as $relation) {
        if ($item->relationLoaded($relation)) {
            $item->$relation->keyBy('id');
        }
    }

    return $item;
});
...