Как загрузить только активные отношения в Laravel? - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть запрос, и я загружаю 3 отношения, как показано ниже:

$data = Hotel::with('rooms.discount')
            ->whereHas('rooms.discount')->paginate(10);

return DiscountResource::collection($data);

отношения, как показано ниже:

public function Rooms()
{
    return $this->Hasmany(Room::class);
}

и отношение скидок с комнатой

public function discount()
{
    return $this->belongsTo(Discount::class, 'id', 'room_id');
}

Так, например, теперь в каждом отеле есть 50 отелей, и среди них только 1 номер имеет скидку. Я хочу просто показать, что 1 номер в этом коде теперь показывает все номера, на которые они имеют скидку, или нет, если нет, то для них он равен нулю, но яне хочу показывать номер без скидки в моем API, потому что это может сделать его таким тяжелым.

1 Ответ

1 голос
/ 28 сентября 2019

Теперь похоже, что таблицы оформлены таким образом:

Отель [id], Номер [id, hotel_id], Скидка [id, room_id]

Это означает, что Rooms-> Скидка не принадлежит To () -> это hasMany (), следовательно, она должна быть названа как: Room-> Discounts () - таким образом, одна комната имеет несколько скидок:

public function discounts()
{
    return $this->hasMany(Discount::class, 'id', 'room_id');
}

И на основании этого - естьможно было бы разместить еще одну связь в отеле:

public function roomDiscounts()
{
    return $this->hasManyThrough(Discount::class, Room::class, 'hotel_id', 'room_id', 'id', 'id');
}

Итак, вы хотите найти все отели, где номера имеют скидки:

$hotels = Hotel::whereHas('roomDiscounts')->get();

Надеюсь, это поможет.

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