Laravel 防止添加过多的附加关系

Laravel prevent adding too many additional relations

我有一个名为 Transfer 的模型和一个名为 Account 的模型,在我的 Transfer 模型中有两个关系:

public function outgoing()
{
    return $this->belongsTo(Account::class, 'outgoing_id');
}

public function incoming()
{
    return $this->belongsTo(Account::class, 'incoming_id');
}

例如,这用于将钱从我的银行账户转账到我的钱包,或者从我的信用卡转账到我的银行等等。

所以一个帐户可以有几种类型。例如,bank 可以是一种帐户类型。现在,如果我想通过使用实际名称 bank 获取所有与银行相关的转账,我必须使用额外的关系,例如:

public function outgoingbank()
{
    return $this->belongsTo(Account::class, 'outgoing_id')->where('type', 'bank');
}

要抓取所有 bank 转出的转出,我现在可以使用这个:

auth()->user()->transfers()->has('outgoingbank')->get();

但我的问题是,是否有更好的方法来执行此操作,例如在我的 Account 模型中使用查询范围,而不是为每个 account type 添加额外的关系?或者我的 Transfer 模型中的访问器?

使用 whereHas 解决了这个问题,我突然想到了这个问题:

$bank_transfers = auth()->user()->transfers()->with('outgoing')->whereHas('outgoing', function ($query){
        return $query->where('type', 'bank');
    })->get();