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'); // []
fonte
2015-11-13 16:24:38
[La documentazione] (http://php.net/manual/en/types.comparisons.php) contiene anche informazioni dettagliate sui risultati di confronti quando si usano entrambi gli operatori. –
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
davvero grazie per le tue belle informazioni. – antoniputra