2014-05-09 18 views
7

In Laravel, ho due tabelle denominate Booking and Clients. Per una prenotazione specifica, ho una relazione con un singolo cliente. Tutto funziona bene quando chiedo a un cliente una prenotazione tranne quando includo o dove. Si prega di guardare lo snippet di codice qui sotto.o Dove non funziona con Laravel query di relazione eloquente

if($client_name!=null) 
     { 
      $client_name='%'.$client_name; 
      $bookings=$bookings->whereHas('client',function($q) use ($client_name){ 
       $q->where('first_name','LIKE',$client_name) 
        //->orWhere('last_name','LIKE',$client_name);     
      }); 
     } 

Con la linea orWhere commentata, ottengo le prenotazioni corretto con il cliente con first_name come specificato dall'utente. Ma quando uso o nella query per last_name, tutte le righe vengono visualizzate come se last_name corrispondesse per ogni riga.

Cosa c'è di sbagliato in questo? Aiuto per favore.

+0

Controllare la query eseguita con 'DB :: getQueryLog()' ad esempio –

+0

Il seguente è l'ultimo output: selezionare * da 'throttle' dove' user_id' =? limite 1. Sto usando il pacchetto Sentry per l'autenticazione. Query sopra viene eseguita nella pagina di amministrazione. – sangam

+0

Questo non ci dice nulla, controlla quello per il tavolo 'clients'. Basta eseguire il codice che hai incollato e subito 'dd (DB :: getQueryLog())' o semplicemente farlo in CLI con artigiano stink –

risposta

9

Il problema è che si dispone di tale codice ora:

WHERE foreignKey = X AND first_name = Y OR last_name = Z 

Così, ovviamente, non è di tornare quello che dovrebbe.

Ora, per farlo funzionare, è necessario aggiungere questi vincoli come un sub in cui:

$bookings=$bookings->whereHas('client',function($q) use ($client_name){ 
      $q->where(function ($q) use ($client_name) { 
       $q->where('first_name','LIKE',$client_name) 
        ->orWhere('last_name','LIKE',$client_name); 
      }); 
     }); 

questo si tradurrà in una query come:

WHERE foreignKey = X AND (first_name = Y OR last_name = Z) 

che è quello che ti serve.

+0

Ha funzionato come un fascino! Grazie. – sangam

Problemi correlati