Jim*_*son 4 php laravel eloquent laravel-5
我想知道您将如何解决我将要显示不同类型事件的问题。例如,2 个不同的事件可以是足球事件和公式 1 事件。
在这两种场景中,有不同类型的参与者。在足球比赛中,这将是 2 支球队,而在公式 1 事件中,这将是所有车手。
这是我想做的 Eloquent 示例:
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;
}
Run Code Online (Sandbox Code Playgroud)
但是当尝试这个并尝试加载它时,我收到错误“调用未定义的方法 Illuminate\Database\Query\Builder::addEagerConstraints()”。
我想我需要朝着正确的方向努力。
提前致谢。
正确的方法是使用多对多多态关系
示例
步骤 1)创建eventables具有以下结构的数据透视表
注意:将 event_id 和 eventable_id 的数据类型更改为相应表的主键
eventables
event_id - integer
eventable_id - integer
eventable_type - string
Run Code Online (Sandbox Code Playgroud)
步骤 2)将Event()方法添加到您的 EventTeam 和 EventDriver 模型
public function events(){
return $this->morphToMany(Event::class, 'eventable');
}
Run Code Online (Sandbox Code Playgroud)
步骤 3)在事件模型中定义上述关系的逆
public function eventDrivers()
{
return $this->morphedByMany(EventDriver::class, 'eventable');
}
public function eventTeams()
{
return $this->morphedByMany(EventTeam::class, 'eventable');
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以检索不同事件的不同模型
| 归档时间: |
|
| 查看次数: |
1367 次 |
| 最近记录: |