2015-11-13 14 views
6

Was ist der Unterschied zwischen Laravel where und whereLoose Methoden?Laravel wo() vs whereLoose() Methoden

Die Dokumentation sagt:

where():

Die where Verfahren strenge Vergleiche verwendet, wenn Elementwerte zu überprüfen. Verwenden Sie die whereLoose-Methode zum Filtern mit "losen" Vergleichen.

whereLoose():

Diese Methode hat dieselbe Signatur wie die Verfahren, bei dem; Alle Werte werden jedoch mit "losen" Vergleichen verglichen.

In diesem Fall, was bedeutet "lose Vergleiche"?

Antwort

11

Die Methode where verwendet einen strikten Vergleich (===), dh sie prüft auch den Typ des Werts. Wenn zum Beispiel eine eine Zeichenfolge und die andere eine Zahl ist, wird sie niemals übereinstimmen.

Die whereLoose Methode verwendet einen losen Vergleich (==), was bedeutet, dass der Typ des Werts nicht überprüft wird. Wenn zum Beispiel eins eine Zeichenfolge und die andere eine Zahl ist, wird es immer noch übereinstimmen, wenn ihre Werte gleich sind.

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

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

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

Sie können eine Tabelle aller Unterschiede in the PHP docs finden.


Hinweis: dies etwa in Laravel ändern 5.3: die where Methode nun losen Vergleich verwenden, und die whereLoose Verfahren werden entfernt. So verwenden strikte Gleichheit, werden Sie === als 2. Argument übergeben:

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

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

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

[Die Dokumentation] (http://php.net/manual/en/types.comparisons.php) enthält auch Angaben über die Ergebnisse Vergleiche bei Verwendung beider Operatoren. –

+0

Danke Jungs. Ist es möglich, dass die gleichen Zeilen des Codes: $ tag = ($ type == "bezahlt")? 0: 1; $ contracts = $ user-> addressbook_user-> where ('paid_or_not', $ tag); mit Paid_or_not als Tinyint, auf zwei verschiedenen Betriebssystemen (Ubuntu und Mac OS X Yosemite), aber mit der gleichen MySQL-Version, gab mir zwei verschiedene Ergebnisse? Stattdessen mit whereLoose gab das gleiche korrekte Ergebnis? @edit: Ok, ich überprüfe die Tabellen im PHP-Handbuch. – Jacson

+0

wirklich vielen Dank für Ihre netten Infos. – antoniputra