如何通过roomAvailabilities表从预订中获取房间数据??
我尝试使用:
$booking = Booking::all();
$booking-> RoomAvailability; //it works
$booking -> Room; //doesnot work
预订模式:
public function room()
{
return $this->hasManyThrough('AppRoom', 'AppRoomAvailability');
}
Sql Server查询可能与我想要的类似:
从dbo中选择*。预订为b
内部联接dbo。房间在b.bookingId=ra上可用作ra。预订ID
内部联接dbo。房间在r.roomId=ra.roomId 上为r
下面是我的表格结构示例
预订:
id
check_in_date
check_out_date
number_of_rooms
房间可用性:
id
booking_id
room_id
status
房间:
id
room_number
预订模式
public function roomAvailability()
{
return $this->hasMany(RoomAvailability::class);
}
房间可用性模型
public function booking()
{
return $this->belongsTo(Booking::class);
}
正如@Alessi55所说,看起来你需要一个ManyToMany(belongsToMany(关系。因此,预计一个预订可以包含一个或多个房间,而一个房间可以在(无或(多个预订中。
当通过调用belongsToMany方法(以及其他表中的反向方法(来定义函数时,可以访问其他模型。你的案例看起来像这样:
预订模式
public function rooms()
{
return $this->belongsToMany(Room::class, 'RoomAvailabilities');
}
房间模型
public function bookings()
{
return $this->belongsToMany(Booking::class, 'RoomAvailabilities');
}
Eloquent将按字母顺序连接两个相关的模型名称,以获取数据透视表。请注意,在您的情况下,需要使用第二个参数(可选(,因为此表的命名法(RoomAvailabilities(超出了Eloquent的预期标准。
有一种方便的方法可以访问链接表属性。只需访问生成的名为pivot的属性。示例:
$booking = Booking::find(1);
foreach ($booking->rooms as $room) {
echo $room->pivot->status;
}
要获得多个相关房间的预订,请使用with
方法(热切加载(,如下所示:
$bookings = Booking::with('rooms')->get();
查看文档。在那里你会发现其他的可能性,例如:
- 自定义枢轴属性名称
- 通过中间表列筛选关系
- 定义自定义中间表模型