Laravel выбирает только отдельное значение из связанной модели (отношение "Многие ко многим")


Это приложение для бронирования отелей, в 1 отеле может быть много номеров, в одном номере может быть много удобств (удобств).

Мои модели такие:

Модель Комнаты:

class Room extends Model
{

    public function amenities()
    {
        return $this->belongsToMany('App\Amenities')->withTimestamps();
    }

    public function hotel(){
        return $this->belongsTo('App\Hotel');
    }

}

Модель Удобств:

class Amenities extends Model
{
    protected $guarded = ['id'];

    public function rooms()
    {
        return $this->belongsToMany('App\Room')->withTimestamps();
    }
}

Я могу получить удобства в каждом номере с помощью следующего запроса:

$room = Room::with('amenities')->with('roomtype')
                        ->with('image')->Where('hotel_id', $hotel->id)->get();

Это даст удобства для каждой комнаты, поэтому я могу обойти все комнаты и получить удобства

@foreach($room as $row)
    @foreach($row->amenities as $amenity)
        {{ $amenity->name }}
    @endforeach
@endforeach

Проблема: Я хочу различные удобства , например, во многих номерах может быть Wi-Fi удобства. но я хочу этого только один раз? как я могу этого добиться?

Author: arun, 2018-02-15

1 answers

Используйте метод whereHas():

$amenities = Amenities::whereHas('room', function($q) use($hotel) {
    $q->where('hotel_id', $hotel->id);
})
->get();

Или вы можете использовать загруженные данные. Только что протестировал это, работает отлично:

$amenities = $room->pluck('amenities')->flatten()->unique('id');
 4
Author: Alexey Mezenin, 2018-02-15 12:39:17