我有一个模型,通过两个键user_id
和recipient_id
属于用户模型的Contract。如何使用$user->contracts
并考虑到这两个关键,才能为用户查询所有合同。
\ App \ Contract模型具有此
$protected $fillable = [
...
'user_id',
'recipient_id',
...
];
public function user ()
{
return $this->belongsTo(User::class);
}
public function recipient()
{
return $this->belongsTo(User::class, 'recipient_id', 'id');
}
\ App \用户模型具有此
public function contracts ()
{
return $this->hasMany(Contract::class);
}
要获得用户合同,我必须这样做
$contracts = Contract::where('user_id', $user->id)
->orWhere('recipient_id', $user->id)
->get();
我想要的是这样的东西。 \App\Contract
public function user () {
return $this->belongsTo([User::class, User::class], ['user_id', 'recipient_id']);
}
我知道https://github.com/staudenmeir/eloquent-has-many-deep,它不能解决我的问题。
我该怎么办?
答案 0 :(得分:1)
我找不到方法,所以我在 ContractController.php
中结束了此操作public function index()
{
$user = Auth::user();
if ($user->isAdmin()) {
return Contract::latest()->get();
}
$contracts = Contract::where('user_id', $user->id)
->orWhere('recipient_id', $user->id)
->get();
return $contracts;
}