gpt4 book ai didi

php - Laravel 仅从相关模型中选择不同的值(多对多关系)

转载 作者:可可西里 更新时间:2023-11-01 07:32:03 26 4
gpt4 key购买 nike

它是一个酒店预订应用程序,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

问题:我想要独特的设施,例如许多房间可能有wifi设施。但我只想要一次?我怎样才能做到这一点?

最佳答案

使用whereHas()方法:

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

或者,您可以使用加载的数据。刚刚对此进行了测试,完美运行:

$amenities = $room->pluck('amenities')->flatten()->unique('id');

关于php - Laravel 仅从相关模型中选择不同的值(多对多关系),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48807105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com