我应该如何为需要引用数据透视表的表配置 Laravel / OctoberCMS 模型?
Posted
技术标签:
【中文标题】我应该如何为需要引用数据透视表的表配置 Laravel / OctoberCMS 模型?【英文标题】:How should I config Laravel / OctoberCMS Model for table that needs to reference pivot table? 【发布时间】:2020-06-09 09:50:07 【问题描述】:我有 3 种内容类型、课程、地点和时间表。课程属于多个地点,地点也属于许多课程,但时间表只能属于一门课程和一个地点。 我已经通过数据透视表(course_location)在课程模型和位置上建立了多对多关系。我的问题在于如何使用模型中的数据透视表连接/引用时间表,或者我做错了。
表格结构
**course Table**
id
name
**location Table**
id
name
**course_location Pivot Table**
id
course_id
location_id
**schedule Table**
id
course_id
location_id
time
class Course extends Model
public $belongsToMany = [
'locations' => [
Location::class,
'table' => 'course_location',
'key' => 'course_id',
'otherKey' => 'location_id',
'timestamps' => true,
],
];
class Location extends Model
public $belongsToMany = [
'courses' => [
Course::class,
'table' => 'course_location',
'key' => 'location_id',
'otherKey' => 'course_id',
'timestamps' => true,
],
];
【问题讨论】:
【参考方案1】:我将只使用带有时间表模型的belongTo
和带有位置和课程模型的hasOne
。
这适用于课程和地点。
class Course extends Model
public $hasOne = [
'schedule' => ['Author\Plugin\Models\Schedule']
];
class Location extends Model
public $hasOne = [
'schedule' => ['Author\Plugin\Models\Schedule']
];
这是日程安排
class Schedule extends Model
public $belongsTo = [
'course' => ['Author\Plugin\Models\Course'],
'location' => ['Author\Plugin\Models\Location']
];
然后您只需将course_id
和location_id
列添加到计划表中。然后,您可以通过日程记录或任何您想要的方式访问课程记录和位置记录。
实验性 - 我从未尝试过这个
在这种情况下,您也许可以在不同的关系中指定多对多关系表 course_location
,它可能会起作用。
class Course extends Model
public $hasOne = [
'schedule' => ['Author\Plugin\Models\Schedule', 'table' => 'course_location']
];
class Location extends Model
public $hasOne = [
'schedule' => ['Author\Plugin\Models\Schedule', 'table' => 'course_location']
];
class Schedule extends Model
public $belongsTo = [
'course' => ['Author\Plugin\Models\Course', 'table' => 'course_location'],
'location' => ['Author\Plugin\Models\Location', 'table' => 'course_location']
];
【讨论】:
感谢@Pettis Brandon 的回答。我对Course
模型中的$hasOne
有疑问。我可以使用$hasMany
吗?因为一个课程会有很多Schedule
。
是的,我只是想你说一个时间表去一个地点和一个课程。因此,您应该能够将它们更改为 hasMany
并且没问题。以上是关于我应该如何为需要引用数据透视表的表配置 Laravel / OctoberCMS 模型?的主要内容,如果未能解决你的问题,请参考以下文章