У меня есть модель под названием 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();
Других решений пока нет …