如何定义此hasManyThrough关系?

时间:2019-04-03 08:49:38

标签: laravel eloquent

我有以下型号。 Event属于CasefileCasefileUser是多对多的。

class Casefile extends Model
{
    public function users()
    {
        return $this->belongsToMany(User::class)->withTimestamps();
    }

    public function events()
    {
        return $this->morphMany('App\Event', 'casefile');
    }
}

class User extends Authenticatable
{
    public function casefiles()
    {
        return $this->belongsToMany(Casefile::class)->withTimestamps();
    }
}

class Event extends Model
{
    public function casefile()
    {
        return $this->belongsTo('App\Casefile');
    }

    public function users()
    {
        return $this->hasManyThrough('App\User', 'App\Casefile');
    }
}

当我尝试:

App\Event::find(526)->users()->get();

它给出:

  

带有消息'SQLSTATE [42S22]的Illuminate / Database / QueryException:   未找到列:1054“字段”中的未知列“ casefiles.event_id”   列表”(SQL:从users中选择casefiles。*,event_idusers   casefiles上的内部联接casefilesid = userscasefile_id   其中casefilesevent_id = 526)'

如何通过Event定义“ User有很多Casefile s”的关系?

2 个答案:

答案 0 :(得分:1)

在没有HasManyThrough表的枢轴模型的情况下,不可能在这里使用casefile_user

您可以改为定义BelongsToMany关系:

public function users()
{
    return $this->belongsToMany('App\User', 'casefile_user', 'casefile_id', null, 'casefile_id');
}

答案 1 :(得分:0)

如果您未遵循laravel列名的命名约定。然后,您可以像这样指定列名

public function users()
    {
        return $this->hasManyThrough(
            'App\User',
            'App\Casefile',
            'event_id', // Foreign key on casefiles table...
            'user_id', // Foreign key on users table...
        );
    }

更多Laravel HasManyThrough Relationship