[解決済み】Eloquent Collection。空白のカウントと検出
質問
これは些細な質問かもしれませんが、Laravelは、Eloquentコレクションが
$result = Model::where(...)->get()
は、要素数のカウントだけでなく、空であることを確認します。
現在、私たちは
!$result
を使用して空の結果を検出しますが、それで十分ですか?また
count($result)
とありますが、実際に空の場合も含めてすべてのケースをカバーしているのでしょうか?
どのように解決するのですか?
を使用する場合
->get()
は、単純に以下のどれかを使うことはできません。
if (empty($result)) { }
if (!$result) { }
if ($result) { }
なぜなら、もしあなたが
dd($result);
のインスタンスがあることに気づくでしょう。
Illuminate\Support\Collection
は、結果がないときでも常に返されます。本質的に、あなたがチェックしているのは
$a = new stdClass; if ($a) { ... }
で、これは常に真を返します。
結果があるかどうかを判断するには、以下のいずれかを実行します。
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_first -
isEmpty()
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_count -
count($result)
が動作するのは、Collection が カウント可能 と、内部のcount()
メソッドを使用します。 http://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html#method_count
ボーナス情報
CollectionとQuery Builderの違いは、メソッド名が同じことが多いので、Laravelの初心者には少しわかりにくいかもしれません。そのため、どちらで作業しているのかが分かりにくい場合があります。クエリビルダは基本的に、クエリを実行し、データベースをヒットするメソッドを呼び出すまで、クエリを構築します(例えば、以下のような特定のメソッドを呼び出した場合)。
->all()
->first()
->lists()
など)。それらのメソッド
また
に存在します。
Collection
オブジェクトで、複数の結果がある場合にクエリビルダから返されることがあります。実際にどのクラスを扱っているのかがわからない場合は
var_dump(User::all())
の助けを借りて)実際にどんなクラスが返されるのか実験してみましょう。
get_class(...)
). Collectionクラスのソースコードをチェックすることを強く勧めるよ。とてもシンプルなんだ。それから、クエリビルダをチェックして、関数名の類似性を見て、実際にデータベースをヒットするタイミングを調べてみてください。
関連
-
[解決済み] npm notice は package-lock.json としてロックファイルを作成しました。
-
[解決済み] 本番環境では `npm run prod` を実行する必要がありますか?
-
[解決済み] のエラーが発生しました。OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054 [重複].
-
[解決済み] Laravel Eloquentを使用して複数のWhere句クエリを作成する方法?
-
[解決済み] Laravel Eloquentを使って最後に挿入されたIDを取得する
-
[解決済み] Laravel Eloquent クエリ WHERE を OR AND OR で使用する?
-
[解決済み】Laravel Eloquent。all()の結果の順序付け
-
[解決済み】laravelで「有効なキャッシュパスを指定してください」エラー
-
[解決済み】 ~/.composer/vendor/bin ディレクトリを PATH に配置する方法は?
-
[解決済み] Laravel Eloquent "WHERE NOT IN" (ララベル・エロクエント "WHERE NOT IN")について
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] npm notice は package-lock.json としてロックファイルを作成しました。
-
[解決済み] 未定義のメソッドIlluminateFoundationApplication::bindShared()への呼び出し。
-
入力ファイルを開くことができませんでした:artisan
-
[解決済み] "サーバーの応答 451 451 Temporary local - please try later" Mailgun、Laravel、VirtualBoxを使用してメールを送信する場合
-
[解決済み] のエラーが発生しました。OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054 [重複].
-
[解決済み】Laravel - Eloquent "Has", "With", "WhereHas" - これらの意味は何ですか?
-
[解決済み】Eloquent Collection。空白のカウントと検出
-
[解決済み】Laravel 5 - artisan seed 【ReflectionException】クラスSongsTableSeederが存在しない。
-
[解決済み】PHP7:ext-domのインストール問題
-
[解決済み】laravelで「有効なキャッシュパスを指定してください」エラー