Laravel:遵循模型的第二个关系

Laravel:遵循模型的第二个关系,laravel,eloquent,relationship,Laravel,Eloquent,Relationship,我正在尝试访问一张票证的关系,以给我一个设备和房间的列表,但我无法让它工作 你应该给我房间(包括设备) 在透视表中,它可以是房间id(当它指整个房间时)或设备id(当它仅指特定设备时),在这种情况下,另一个应该为空 把它分成两张桌子会更好吗?一个用于设备,一个用于房间?或者,如果有可能通过人际关系做到这一点 非常感谢D helpdesk_rooms id name helpdesk_devices id name room_id helpdesk_tickets_ro

我正在尝试访问一张票证的关系,以给我一个设备和房间的列表,但我无法让它工作

你应该给我房间(包括设备)

在透视表中,它可以是房间id(当它指整个房间时)或设备id(当它仅指特定设备时),在这种情况下,另一个应该为空

把它分成两张桌子会更好吗?一个用于设备,一个用于房间?或者,如果有可能通过人际关系做到这一点

非常感谢D

helpdesk_rooms
  id
  name


helpdesk_devices
  id
  name
  room_id


helpdesk_tickets_rooms_devices
  ticket_id
  room_id (Null when Device ID is set)
  device_id (Null when Room ID is set)

helpdesk_tickets
  id
  name
类设备扩展模型
{
受保护的$table='帮助台\设备';
//public$primaryKey=null;
公共功能设备室()
{
返回$this->hasOne(Room::class);
}
类票证扩展模型
{
受保护的$table=‘帮助台_票证’;
公共活动室指示()
{
返回$this->hasManyThrough(
房间:班级,
TicketRoomDevice::类,
“ticket\u id”,//TicketRoomDevice表上的外键。。。
“id”,//房间表上的外键。。。
'id',//票证表上的本地密钥。。。
'room_id'//TicketRoomDevice表上的本地密钥。。。
);
}
//如何从设备->房间(名称)中获取房间名称??
公共功能室设备()
{
返回$this->roomsDirect()->???;
}

对于这种情况,最好的方法是通过多态关系解决

在您提出的示例中,它是这样的:

服务台和房间

  • 身份证
  • 名字
帮助台设备

  • 身份证
  • 名字
  • 房间号
服务台

  • 车票号码
  • 可售票号码
  • 可票务类型
类设备扩展模型
{
公众活动门票()
{
返回$this->morphOne(Ticket::class,'ticketable');
}
}
教室扩展模型
{
公众活动门票()
{
返回$this->morphOne(Ticket::class,'ticketable');
}
}
舱单扩展模型
{
公共功能可勾选()
{
返回$this->morphTo();
}
}
这将使您能够轻松处理其他关系,并为您节省更复杂的表和配置。
您可以在官方文档中查看更多信息

我想您正在寻找多态关系。请看,我用多态多对多关系解决了这个问题,并在您的回答中指导我。谢谢!
Device HasOne Room

Ticket HasMany Devices
Ticket HasMany Rooms