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 удобства. но я хочу этого только один раз? как я могу этого добиться?
4
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