1. ホーム
  2. php

[解決済み] Laravel Eloquent フィールドが X または null の場合

2023-02-09 12:33:18

質問

このようなテーブルがあります。

table
- field1: tinyint
- field2: varchar (nullable)
- datefield: timestamp (nullable)

今、私はfield1が1、field2がnullで、datefieldがXより小さいかnullであるすべてのエントリを取得したいです。私はすでにこのようなものを試してみました。

$query = Model::where('field1', 1)
            ->whereNull('field2')
            ->where('datefield', '<', $date)
            ->orWhereNull('datefield');

が、これはうまくいきません。私はいつもdatefieldがNULLであるすべてのエントリを取得します。他のフィールドが何であるかは問題ではありません。2つのクエリでそれを分割することも試みました。まず、datefield が X より小さいか null であるすべての行を取得し、次に (それに基づいて) field1 が 1 であり field2 が null であるすべてのフィールドを取得します。

結果は同じでした。 これを行う方法について何か考えがありますか?

どのように解決するのですか?

を利用する必要があるようです。 高度な where 節 .

での検索を考えると field1field2 は一定なのでそのままにしておきますが、検索を調整するために datefield を少し調整します。

これを試してみてください。

$query = Model::where('field1', 1)
    ->whereNull('field2')
    ->where(function ($query) {
        $query->where('datefield', '<', $date)
            ->orWhereNull('datefield');
    }
);

クエリをデバッグして、なぜ動作しないのかを確認する必要がある場合、実際にどのようなSQLを実行しているのかを確認するのに役立つことがあります。そのためには ->toSql() をeloquentクエリの末尾に連結してSQLを生成することができます。