不同模型类型之间的不同关系Laravel
我想知道如何解决我要显示不同类型事件的问题。例如,2个不同的事件可以是足球事件和公式1事件。不同模型类型之间的不同关系Laravel
在这两种情况下有不同类型的参与者。在一场足球比赛中,这将是两支球队,而在一场公式赛事中,这将是所有的车手。
这里是我的,我想怎么办雄辩例如:
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;
}
但尝试这一点,并尝试时加载它,我得到错误“调用未定义的方法照亮\数据库\查询\生成器: :addEagerConstraints()”。
我想我需要一个正确的方向。
在此先感谢。
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;
将返回模型类的实例和关系有望重返HasOne,的hasMany,BelongsToMany等类型的实例。
要解决此问题,回退关系必须包含任何这些类的实例。
是的,我明白。但是这绝不应该发生,因为type属性应该始终存在。自编辑抱怨之后,我刚刚添加了它。 –
@JimmieJohansson你总是可以做一些像返回新的HasMany;模仿它,或者返回完全不同的课程。 –
正确的做法是使用Many To Many Polymorphic Relations
例
步骤1)具有以下结构
注创建透视表eventables
: EVENT_ID和eventable_id的数据类型更改为各表的主键
eventables
event_id - integer
eventable_id - integer
eventable_type - string
步骤2)将Event()
方法添加到您的EventTea m和事件驱动模型
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');
}
,你可以在不同的事件
但是这意味着我需要为事件 - > eventTeams为足球比赛和Event-> eventDrivers为公式1?我希望在参与者方法下使用它们,所以当使用“$ with = ['participants']”加载事件时,我总是可以加载参与者。 –
您可以使用“许多检索不同型号To Many Polymorphic Relations“,https://laravel.com/docs/5.4/eloquent-relationships#many-to-many-polymorphic-relations – jaysingkar
@seifeddineBesbes只是好奇地想知道,它是如何与用户的问题相关 – jaysingkar