Laravel 7 Query with() e utilizzando Where()

Aug 26 2020

Ciao ragazzi, ho una domanda simile a questa

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

Devo filtrare la transazione in base all'iso_id che appartiene all'utente corrente che ha effettuato l'accesso.

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

L'iso_id che devo confrontare è all'interno della tabella del commerciante

auth()->user()->isIso() restituisce l'iso_id corretto se true o invia false in caso contrario

Quindi il mio primo tentativo è stato usare where('merchant.iso_id', '=', auth()->user()->isIso())

Ma ciò restituisce che la colonna non esiste perché per qualche motivo non passa dal modello di transazione a quello del commerciante.

Non sono sicuro di come utilizzare le cose all'interno di with() come selettore per il mio where()

Qualsiasi aiuto sarebbe apprezzato!

Risposte

1 DigitalDrifter Aug 26 2020 at 00:38

Prova a utilizzare whereHasper aggiungere il vincolo:

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