不同模型类型 Laravel 上的不同关系

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()”。

我想我需要朝着正确的方向努力。

提前致谢。

jay*_*kar 5

正确的方法是使用多对多多态关系
示例
步骤 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)

现在,您可以检索不同事件的不同模型