回答:
使用->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()代わりに使用->get()して、最初に見つかったモデルのインスタンスを返すこともできnullます。これは、データベースからの結果が1つだけ必要な場合、または予期している場合に役立ちます。
$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)コレクションはCountableと内部count()メソッドを実装しているため機能します:http : //laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html#method_countコレクション名とクエリビルダーの違いは、Laravelの新規参入者を混乱させる可能性があります。これは、2つのメソッド名が同じであることが多いためです。そのため、何に取り組んでいるのかを理解するのは混乱する可能性があります。クエリビルダーは基本的に、クエリを実行してデータベースにアクセスするメソッドを呼び出すまで(たとえば、特定のメソッドを呼び出すとき->all() ->first() ->lists()など)、クエリを構築します。これらのメソッドはオブジェクトにも存在し、Collection複数の結果がある場合、クエリビルダーから返される可能性があります。実際に使用しているクラスがわからない場合は、実際にどのクラスが返されているかを確認してみてvar_dump(User::all())ください(助けを借りて)get_class(...))。Collectionクラスのソースコードを確認することを強くお勧めします。これは非常に簡単です。次に、クエリビルダーをチェックして関数名の類似点を確認し、実際にデータベースにヒットするタイミングを調べます。
Model::first()-実際にはクエリビルダーの 'first`メソッドに作用しており、コレクションには作用していないため、データベースから最初のメソッドを選択します-ただしModel::get()、Illuminate \ Supportのインスタンスを返します\ Collectionなので、そうした場合は$r = Model::get()、$r->first()そのコレクション内の最初の項目が選択されます。
count($result)取り上げていないことの1つは、機能するかどうかです。その詳細を追加すると改善されます。
foreachループを使用してコレクションの各メンバーを反復処理してから、これらのチェックの1つを使用する必要があります(:と考えてくださいcount($collection->column))。
私はあなたが探していると思います:
$result->isEmpty()
これはとは異なりempty($result)ます。結果は空のコレクションになるため、これは当てはまりません。あなたの提案count($result)も良い解決策です。ドキュメントに参照が見つかりません
使用した方がいいと思います
$result->isEmpty();
コレクションが空の場合、isEmptyメソッドはtrueを返します。それ以外の場合は、falseが返されます。
Laravelのドキュメンテーションによると、あなたはこの方法を使用できると述べています:
$result->isEmpty();
isEmptyメソッドが返すtrueコレクションが空の場合。それ以外の場合falseは返されます。
したがって、Laravelは実際にはコレクションを返しますModel::all();
。配列を使用したいコレクションを使用したくない場合は、タイプを設定できます。
(array)Model::all();次に、array_filterを使用して結果を返すことができます
$models = (array)Model::all()
$models = array_filter($models);
if(empty($models))
{
do something
}
これにより、などの操作も可能になりますcount()。
以下を使用できます。 $counter = count($datas);
first()と結果がとは異なることを追加するだけです。空の結果としてget()確認できます!$resultnull