如何从laravel中间接连接的表中检索数据



如何通过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();

查看文档。在那里你会发现其他的可能性,例如:

  • 自定义枢轴属性名称
  • 通过中间表列筛选关系
  • 定义自定义中间表模型

相关内容

  • 没有找到相关文章

最新更新