323

$result = Model::where(...)->get()これは些細な質問かもしれませんが、要素の数を数えるだけでなく、返された Eloquent コレクションが空であるかどうかを確認する特定の方法を Laravel が推奨しているかどうか疑問に思っています。

現在!$result、空の結果を検出するために使用していますが、それで十分ですか? に関してはcount($result)、空の結果を含むすべてのケースを実際にカバーしていますか?

4

12 に答える 12

668

使用->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) { ... }

注意事項・参考文献

ボーナス情報

Collection と Query Builder の違いは、メソッド名が 2 つの間で同じであることが多いため、Laravel の初心者には少し混乱する可能性があります。そのため、自分が何に取り組んでいるかを知るのは混乱する可能性があります。Query Builder は基本的に、クエリを実行してデータベースにヒットするメソッドを呼び出すまでクエリを構築します (たとえば、->all() ->first() ->lists()などの特定のメソッドを呼び出す場合)。これらのメソッドはオブジェクトに存在し、複数の結果がある場合にクエリ ビルダーから返される可能性があります。Collection実際に作業しているクラスがわからない場合は、実行してvar_dump(User::all())実験して、実際に返されるクラスを確認してください (get_class(...))。Collection クラスのソース コードを確認することを強くお勧めします。これは非常に単純です。次に、Query Builder をチェックして、関数名の類似点を確認し、実際にデータベースにヒットするタイミングを調べます。

于 2013-12-14T16:22:04.283 に答える
88

私はあなたが探していると思います:

$result->isEmpty()

empty($result)これは、結果が空のコレクションになるため、真ではない とは異なります。あなたの提案count($result)も良い解決策です。ドキュメントで参照が見つかりません

于 2013-12-13T10:23:11.953 に答える
5

Laravel Documentationによると、次のように使用できます。

$result->isEmpty();

コレクションが空の場合、メソッドisEmptyは戻ります。trueそれ以外の場合falseは返されます。

于 2019-03-01T09:42:30.777 に答える
3

できるよ

$result = Model::where(...)->count(); 

結果をカウントします。

使用することもできます

if ($result->isEmpty()){}

結果が空かどうかを確認します。

于 2018-04-01T06:30:53.103 に答える
0

そのため、Laravelは実際にコレクションを返すだけで、Model::all(); コレクションが必要ない場合は配列が必要なため、タイプセットできます。 (array)Model::all();次に、array_filter を使用して結果を返すことができます

$models = (array)Model::all()
$models = array_filter($models);
if(empty($models))
{
 do something
}

これにより、次のようなこともできますcount()

于 2015-11-24T05:06:40.907 に答える
0

配列に値が存在するin_array()かどうかをチェックします。

public function isAbsolutelyEmpty($value)
{
   return in_array($value, ["", "0", null, 0, 0.0], true);
}
于 2021-12-19T12:25:20.767 に答える