$result = Model::where(...)->get()
これは些細な質問かもしれませんが、要素の数を数えるだけでなく、返された Eloquent コレクションが空であるかどうかを確認する特定の方法を Laravel が推奨しているかどうか疑問に思っています。
現在!$result
、空の結果を検出するために使用していますが、それで十分ですか? に関してはcount($result)
、空の結果を含むすべてのケースを実際にカバーしていますか?
$result = Model::where(...)->get()
これは些細な質問かもしれませんが、要素の数を数えるだけでなく、返された Eloquent コレクションが空であるかどうかを確認する特定の方法を Laravel が推奨しているかどうか疑問に思っています。
現在!$result
、空の結果を検出するために使用していますが、それで十分ですか? に関してはcount($result)
、空の結果を含むすべてのケースを実際にカバーしていますか?
使用->get()
する場合、以下のいずれかを単純に使用することはできません。
if (empty($result)) { }
if (!$result) { }
if ($result) { }
結果がない場合でも、 のインスタンスが常に返されることdd($result);
に気付くでしょう。Illuminate\Support\Collection
基本的に、チェックしている$a = new stdClass; if ($a) { ... }
のは、常に true を返すものです。
結果があるかどうかを判断するには、次のいずれかを実行できます。
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)
Collection はCountableと内部count()
メソッドを実装しているため機能します: http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html#method_countCollection と Query Builder の違いは、メソッド名が 2 つの間で同じであることが多いため、Laravel の初心者には少し混乱する可能性があります。そのため、自分が何に取り組んでいるかを知るのは混乱する可能性があります。Query Builder は基本的に、クエリを実行してデータベースにヒットするメソッドを呼び出すまでクエリを構築します (たとえば、->all()
->first()
->lists()
などの特定のメソッドを呼び出す場合)。これらのメソッドはオブジェクトにも存在し、複数の結果がある場合にクエリ ビルダーから返される可能性があります。Collection
実際に作業しているクラスがわからない場合は、実行してvar_dump(User::all())
実験して、実際に返されるクラスを確認してください (get_class(...)
)。Collection クラスのソース コードを確認することを強くお勧めします。これは非常に単純です。次に、Query Builder をチェックして、関数名の類似点を確認し、実際にデータベースにヒットするタイミングを調べます。
私はあなたが探していると思います:
$result->isEmpty()
empty($result)
これは、結果が空のコレクションになるため、真ではない とは異なります。あなたの提案count($result)
も良い解決策です。ドキュメントで参照が見つかりません
Laravel Documentationによると、次のように使用できます。
$result->isEmpty();
コレクションが空の場合、メソッドisEmpty
は戻ります。true
それ以外の場合false
は返されます。
できるよ
$result = Model::where(...)->count();
結果をカウントします。
使用することもできます
if ($result->isEmpty()){}
結果が空かどうかを確認します。
そのため、Laravelは実際にコレクションを返すだけで、Model::all();
コレクションが必要ない場合は配列が必要なため、タイプセットできます。
(array)Model::all();
次に、array_filter を使用して結果を返すことができます
$models = (array)Model::all()
$models = array_filter($models);
if(empty($models))
{
do something
}
これにより、次のようなこともできますcount()
。
配列に値が存在するin_array()
かどうかをチェックします。
public function isAbsolutelyEmpty($value)
{
return in_array($value, ["", "0", null, 0, 0.0], true);
}