我有以下型号。 Event
属于Casefile
。 Casefile
和User
是多对多的。
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_id
。users
casefiles
上的内部联接casefiles
。id
=users
。casefile_id
其中casefiles
。event_id
= 526)'
如何通过Event
定义“ User
有很多Casefile
s”的关系?
答案 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...
);
}