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