これは些細な質問かもしれませんが、Laravel では、返された Eloquent コレクションが空かどうかをチェックしたり、要素の数を数えたりする特定の方法を推奨しているかどうか疑問に思っています$result = Model::where(...)->get()
。
現在、!$result
空の結果を検出するために を使用しており、これで十分でしょうか? についてはcount($result)
、空の結果も含め、実際にすべてのケースをカバーしているのでしょうか?
ベストアンサー1
使用時に、->get()
以下のいずれかを単純に使用することはできません。
if (empty($result)) { }
if (!$result) { }
if ($result) { }
結果がない場合でも、 のインスタンスが常に返されることに気付くでしょう。基本的に、 が常に true を返すかどうかを確認していdd($result);
ます。Illuminate\Support\Collection
$a = new stdClass; if ($a) { ... }
結果があるかどうかを確認するには、次のいずれかを実行します。
if ($result->first()) { }
if (!$result->isEmpty()) { }
if ($result->count()) { }
if (count($result)) { }
クエリ ビルダーで->first()
の代わりにを使用することもできます。これにより、最初に見つかったモデルのインスタンスが返されます。そうでない場合は、データベースから 1 つの結果のみが必要な場合や、期待している場合に便利です。->get()
null
$result = Model::where(...)->first();
if ($result) { ... }
注釈 / 参考文献
->first()
http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html#method_firstisEmpty()
http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html#method_isEmpty->count()
http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html#method_countcount($result)
コレクションが実装されているため動作します可算内部count()
メソッド:http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html#method_count
ボーナス情報
Collection と Query Builder の違いは、メソッド名が 2 つで同じであることが多いため、Laravel を初めて使用する人にとっては少しわかりにくいかもしれません。そのため、どちらを操作しているのかわかりにくい場合があります。Query Builder は基本的に、メソッドを呼び出してクエリを実行し、データベースにアクセスするまでクエリを構築します (たとえば、などの特定のメソッドを呼び出すときなど->all()
->first()
->lists()
)。これらのメソッドはオブジェクトにもCollection
存在し、複数の結果がある場合に Query Builder から返されることがあります。実際にどのクラスを操作しているのかわからない場合は、 を実行してvar_dump(User::all())
実験し、実際にどのクラスが返されるかを確認してください ( の助けを借りてget_class(...)
)。Collection クラスのソース コードを確認することを強くお勧めします。非常に簡単です。次に、Query Builder を確認し、関数名の類似点を確認して、実際にデータベースにアクセスするタイミングを確認します。