Laravel防止添加太多其他关系

时间:2018-07-12 16:14:21

标签: php laravel scopes

我有一个名为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模型中的访问者?

1 个答案:

答案 0 :(得分:1)

使用whereHas修复了该问题,而突然出现在我脑海中的是

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