3

ID 以外の条件に基づいてフィールドを選択する必要があることがよくあります。

だから、$user = User::where('last_login', $lastLogin)->where('last_warning', $lastWarning)->get();完璧に動作します。

それは、null を許可する場所の 1 つを設定するまでです (やりましょうlast_login)。

つまり、値を持つことも、null になることもできます。

つまり、2 つの関数のwhere()いずれかを使用する必要があることを意味whereNull()し、そのためにはチェーンを壊す必要があるため、次のようになります。

$user = User::where('last_warning', $lastWarning);

is_null($lastLogin) ? $user->whereNull('last_login') : $user->where('last_login', $lastLogin);

$user = $user->get();

whereこれに対処する方法があるかどうか疑問に思っていますか?現在のように、うまくいかないnullところまで通り抜けると!where column = null

4

4 に答える 4

5

2 つのオプション:

オプション1:

if (is_null($lastLogin))
{
    $user = User::whereNull('last_login')->where('last_warning', $lastWarning)->get();
}
else
{
    $user = User::where('last_login', $lastLogin)->where('last_warning', $lastWarning)->get();
}

オプション 2:

$user = User::where('last_login', (is_null($lastLogin) ? 'IS' : '=') ,$lastLogin)->where('last_warning', $lastWarning)->get();

オプション 2 は、クエリを 'where last_login = x'または ' where last_login IS null'にします。

于 2013-02-20T16:42:41.790 に答える
3

これを試すことができます:

User::where(function($query) use ($lastlogin)
        {
            if(is_null($lastLogin))
            {
                $query->whereNull('last_login');
            }
            else
            {
                $query->where('last_login', '=', $lastLogin);
            }
        })->get();

これは、複数のパラメーターを持つ長いクエリを処理する場合に適したソリューションです。

于 2015-01-16T11:11:05.370 に答える
1

Laravel 5.3 の時点で、->where('column', null)を自動的に生成できるようになりましたWHERE column IS NULL

null変数を使用する場合は、PHP の厳密な値があることを確認してください。

于 2016-10-18T19:09:32.707 に答える
1

DB::raw() も使用できます。

User::where('last_login', 'IS', DB::raw('null'))->where_last_warning($lastWarning)->get();
于 2013-02-20T17:03:03.153 に答える