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'); // []
[Die Dokumentation] (http://php.net/manual/en/types.comparisons.php) enthält auch Angaben über die Ergebnisse Vergleiche bei Verwendung beider Operatoren. –
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
wirklich vielen Dank für Ihre netten Infos. – antoniputra