我有一个名为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
模型中的访问者?
答案 0 :(得分:1)
使用whereHas修复了该问题,而突然出现在我脑海中的是
$bank_transfers = auth()->user()->transfers()->with('outgoing')->whereHas('outgoing', function ($query){
return $query->where('type', 'bank');
})->get();