我想知道你如何解决我将要展示不同类型事件的问题。例如,2个不同的事件可以是足球事件和公式1事件。
在这两种情景中,有不同类型的参与者。在一场足球比赛中,这将是两支球队,而在一个formular1比赛中,它将成为所有车手。
以下是我想要做的雄辩示例:
public function participants()
{
if ($this->type == 'soccer_game') {
return $this->hasMany(EventTeam::class);
} else if ($this->type == 'formula1_race') {
return $this->hasMany(EventDriver::class);
}
return $this;
}
但是当尝试这个并尝试加载它时,我得到了错误"调用未定义的方法Illuminate \ Database \ Query \ Builder :: addEagerConstraints()"。
我认为我需要朝着正确的方向努力。
提前致谢。
答案 0 :(得分:2)
正确的方法是使用Many To Many Polymorphic Relations
例如
步骤1)使用以下结构创建数据透视表eventables
注意:将event_id和eventable_id的数据类型更改为相应表格的主键
eventables
event_id - integer
eventable_id - integer
eventable_type - string
步骤2)将Event()
方法添加到EventTeam和EventDriver模型
public function events(){
return $this->morphToMany(Event::class, 'eventable');
}
步骤3)在事件模型中定义上述关系的倒数
public function eventDrivers()
{
return $this->morphedByMany(EventDriver::class, 'eventable');
}
public function eventTeams()
{
return $this->morphedByMany(EventTeam::class, 'eventable');
}
现在,您可以在不同的事件
上检索不同的模型答案 1 :(得分:0)
public function participants()
{
if ($this->type == 'soccer_game') {
return $this->hasMany(EventTeam::class);
} else if ($this->type == 'formula1_race') {
return $this->hasMany(EventDriver::class);
}
return $this;
}
在这种情况下,return $this;
将返回Model类的实例,并且期望关系返回HasOne,HasMany,BelongsToMany等类型的实例。
要解决此问题,回退关系必须包含任何这些类的实例。