在这里遇到一些Laravel问题。
我有3个型号:
通知
参与者
用户
通知可以使发件人(sender_id)和收件人(recipient_id)都引用参与者表。 参与者具有对用户(user_id)的引用。
我正在尝试使用以下代码获取发件人和收件人的通知列表。
public function sender()
{
return $this->hasOne('App\Models\Participant', 'sender_id', 'id')->with(['user']);
}
public function recipient()
{
return $this->hasOne('App\Models\Participant', 'id', 'recipient_id')->with(['user']);
}
返回空结果 [关系:受保护] =>排列 ( [sender] => [收件人] => )
将代码更改为:
public function sender()
{
return $this->hasOne('App\Models\Participant', 'sender_id', 'id')->with(['user'])->first();
}
public function recipient()
{
return $this->hasOne('App\Models\Participant', 'id', 'recipient_id')->with(['user'])->first();
}
我得到了
“调用未定义的方法Illuminate \ Database \ Query \ Builder :: addEagerConstraints()”
答案 0 :(得分:0)
首先,让你的模型更清洁,然后在那里写下关系逻辑。
public function sender()
{
return $this->hasOne('App\Models\Participant');
}
public function recipient()
{
return $this->hasOne('App\Models\Participant');
}
现在,在您的控制器中,您编写了逻辑:
$sender = YourModel::sender()->where('sender_id', $id)->first();
希望这有帮助。
答案 1 :(得分:0)
您的关系设置不正确。由于notifications
表具有外键(sender_id
和recipient_id
),因此可以说Notification
属于Participant
,而{{1}有一个或多个Participant
s。
您需要将Notification
模型上的关系更新为Notification
关系:
belongsTo
一对夫妇注意到:
由于您没有显示您的参与者/用户关系,因此请确保将其定义为"参与者属于用户,用户有一个或多个参与者"。这就是您的数据库的设置方式。
您在第二次尝试时遇到的错误("调用未定义的方法")是因为关系方法必须返回public function sender()
{
return $this->belongsTo(Participant::class);
}
public function recipient()
{
return $this->belongsTo(Participant::class);
}
实例。通过调用Relation
,您实际上是在执行查询并返回first()
,这是不允许的。