2015-11-13 14 views
6

LaravelのwherewhereLooseの違いは何ですか?Laravelここで()vsLoose()メソッド

ドキュメントは言う:

where():項目の値をチェックするときの方法は、厳密な比較を使用しています

ザ・。 "ルース"比較を使用してフィルタリングするには、whereLooseメソッドを使用します。

whereLoose()

この方法は、ここでの方法と同一の署名を有します。ただし、すべての の値は「緩やかな」比較を使用して比較されます。

この場合、「緩やかな比較」とはどういう意味ですか?

答えて

11

whereメソッドは、厳密な比較(===)を使用します。つまり、値の型もチェックされます。たとえば、1つが文字列であり、もう1つが数字である場合、それは決して一致しません。

whereLooseメソッドは、緩い比較(==)を使用します。つまり、値の型はチェックされません。たとえば、1つが文字列で、もう1つが数字の場合、値が同じ場合でも一致します。

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

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

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

the PHP docsのすべての違いの表があります。


注:これはLaravel 5.3に変更しようとしている:where方法は今緩い比較を使用し、whereLoose方法が削除されます。厳密な等価を使用するには、第二引数として===を渡します:

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

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

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

[ドキュメント](http://php.net/manual/en/types.comparisons.php)も、結果に関する詳細が含まれています両方の演算子を使用する場合の比較 –

+0

ありがとうございます。同じコード行が可能でしょうか?$ tag =($ type == 'paid')? 0:1; $ contracts = $ user-> addressbook_user->ここで( 'paid_or_not'、$ tag); 2つの異なるOS(UbuntuとMac OS X Yosemite)では、同じmysqlバージョンを使って、tinyintとしてpaid_or_notを使用すると、2つの異なる結果が得られましたか?代わりに、whereLooseは同じ正しい結果を返しましたか? @編集:私はPHPマニュアルの表をチェックします。 – Jacson

+0

本当にありがとうございました。 – antoniputra

関連する問題