Eloquent relationship возвращает несколько массивов

Я установил связь между 2 моделями Route и Booking.

на Маршрут много бронирований Бронирование принадлежит тоже маршруту

Модель маршрута:

//
public function books()
{
    return $this->hasMany(Booking::class);
}

Модель бронирования

public function route()
{
    return $this->belongsTo(Route::class);
}

Теперь в моем контроллере я пытаюсь получить доступ к маршруту, которому принадлежит конкретное бронирование.

public function bookFeed(Request $request, Booking $booking)
{
    $bookR = $booking->with('route')->get();

    dd($bookR);
}

или даже это

$bookR = $bookRef->route()->get();

dd($bookR);

и я получаю коллекцию с несколькими массивами Route, теперь для доступа к значению мне нужно сделать

$bookR[0]->value

почему это так, что я делаю не так?

каков результат dd ($ booking-> существует);

Hilmi Erdem KEREN 11.04.2018 12:34

результат верный

Dapo Michaels 11.04.2018 12:36

Попробуйте $booking->load('route'); вместо $booking->with('route')->get(). Это загрузит соответствующий маршрут вашего бронирования. При таком использовании ваш код запускает новый запрос.

Hilmi Erdem KEREN 11.04.2018 12:39
1
3
649
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Используйте first() в своем запросе

$bookR = $booking->route()->first();

или же

$bookR = $booking->route

вы использовали ->get(), который генерирует сбор

Sohel0415 11.04.2018 12:39

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

Dapo Michaels 11.04.2018 12:41

Если вы проверите свои журналы запросов, это решение выполняет несколько запросов выбора в базе данных. Однако в этом нет необходимости. У вас уже есть объект бронирования. Единственное, что вам нужно сделать, это загрузить отношение, а не запрашивать само бронирование.

Hilmi Erdem KEREN 11.04.2018 12:46

@dapo у вас уже есть объект бронирования, вам больше не нужно беспокоиться

Sohel0415 11.04.2018 12:53

Попробуй это:

public function bookFeed(Request $request, Booking $booking)
{
    $booking->load('route');

    dd($booking); // or $booking->route now.
}

Другие вопросы по теме