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();
我有一个名为 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();