2015-11-13 11 views
6

Qual è la differenza tra i metodi di Laravel where e whereLoose?Laravel dove() vs whereLoose() metodi

La documentazione dice:

where():

Il metodo utilizza in cui i confronti severi durante il controllo i valori delle voci. Usa il metodo whereLoose per filtrare usando i confronti "liberi".

whereLoose():

Questo metodo ha la stessa firma del metodo in cui; tuttavia, tutti i valori vengono confrontati utilizzando i confronti "liberi".

In questo caso, cosa significa "paragoni allentati"?

risposta

11

Il metodo where utilizza un confronto rigoroso (===), il che significa che controlla anche il tipo del valore. Se, ad esempio, uno è una stringa e l'altro un numero, non corrisponderà mai.

Il metodo whereLoose utilizza il confronto allentato (==), ovvero non controlla il tipo di valore. Se, ad esempio, uno è una stringa e l'altro un numero, continuerà a corrispondere se i loro valori sono gli stessi.

$collection = collect([['price' => 100], ['price' => 200]]); 

$collection->where('price', '100'); // [] 

$collection->whereLoose('price', '100'); // [['price' => 100]] 

Si può trovare una tabella di tutte le differenze di the PHP docs.


Nota: questo sta per cambiare in laravel 5.3: il metodo where userà confronto sciolto, e il metodo whereLoose verrà rimosso. Per utilizzare uguaglianza rigorosa, si passa === come il 2 ° argomento:

$collection = collect([['price' => 100], ['price' => 200]]); 

$collection->where('price', '100'); // [['price' => 100]] 

$collection->where('price', '===', '100'); // [] 
+1

[La documentazione] (http://php.net/manual/en/types.comparisons.php) contiene anche informazioni dettagliate sui risultati di confronti quando si usano entrambi gli operatori. –

+0

Grazie ragazzi. È possibile che le stesse righe di codice: $ tag = ($ type == 'paid')? 0: 1; $ contratti = $ utente-> indirizzo_utente-> dove ('paid_or_not', $ tag); con paid_or_not come tinyint, su due sistemi operativi diversi (Ubuntu e Mac OS X Yosemite) ma con la stessa versione di mysql, mi ha dato due risultati diversi? Invece con whereLoose ha dato lo stesso risultato corretto? @edit: Ok controllerò le tabelle sul manuale php. – Jacson

+0

davvero grazie per le tue belle informazioni. – antoniputra