Laravel 7 Consulta com () e usando Where ()

Aug 26 2020

Olá pessoal, tenho uma dúvida que se parece com isso

$query = Transaction::with(['customer', 'merchant', 'batch'])
->select(sprintf('%s.*', (new Transaction)->table));

Preciso filtrar a transação com base no iso_id que pertence ao usuário atual logado.

$query = Transaction::with(['customer', 'merchant', 'batch'])
->select(sprintf('%s.*', (new Transaction)->table))
->where('merchant.iso_id', '=', auth()->user()->isIso());

O iso_id com o qual preciso comparar está dentro da tabela do comerciante

auth()->user()->isIso() retorna o iso_id correto se verdadeiro ou envia falso se não

Então, minha primeira tentativa foi usar where('merchant.iso_id', '=', auth()->user()->isIso())

Mas isso retorna que a coluna não existe porque, por algum motivo, não está mudando do modelo de transação para o do comerciante.

Não tenho certeza de como usar as coisas dentro de with() como um seletor para o meu where()

Qualquer ajuda seria apreciada!

Respostas

1 DigitalDrifter Aug 26 2020 at 00:38

Tente usar whereHaspara adicionar a restrição:

$query = Transaction::with(['customer', 'batch'])
                    ->whereHas('merchant', function ($q) {
                         $q->where('iso_id', auth()->user()->isIso());
                    })
                    ->select(sprintf('%s.*', (new Transaction)->table))
                    ->get();