雄辩的关系。与不同的键有很多关系

时间:2019-08-27 13:26:55

标签: laravel laravel-5.5

背景

我有一个模型,通过两个键user_idrecipient_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,它不能解决我的问题。

我该怎么办?

1 个答案:

答案 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;
    }