いくつかのパラメータに基づいてユーザーを取得するクエリがあります。Laravel where節が一連のorwhereの後で動作しない
$users = User::where(function($query) use($queryTags_userIDs) {
$query->whereIn('id', $queryTags_userIDs);
})->orWhere(function($query) use($queryImageTitles_userIDs) {
$query->whereIn('id', $queryImageTitles_userIDs);
})->orWhere('username', 'LIKE', "%{$query}%")
->orWhere('keywords', 'LIKE', "%{$query}%")
->orWhere('profile_text', 'LIKE', "%{$query}%")
->orWhere('tagline', 'LIKE', "%{$query}%")
->where('role', 2)
->orderBy('last_login', 'desc')
->paginate(15);
今、このすべてがうまくいきます。この部分を除き
:代わりの役割は2であるユーザーを取得する
->where('role', 2)
、それはEVERY役割のユーザーを取得します。
しかし、いくつかのorWheresを取り除くとうまくいくでしょう。
私はこれらの3 orWheresを取り除く場合:
->orWhere('keywords', 'LIKE', "%{$query}%")
->orWhere('profile_text', 'LIKE', "%{$query}%")
->orWhere('tagline', 'LIKE', "%{$query}%")
、それが唯一の事実役割2.をユーザーにフェッチを開始し、これら3特定orWheresは問題に
を引き起こし、何らかの理由で、あります私は
$users = User::where('username', 'LIKE', "%{$query}%")
->orWhere('keywords', 'LIKE', "%{$query}%")
->where('role', 2)
->orderBy('last_login', 'desc')
->paginate(7);
にクエリを削減した場合、それはまだ役割の外からユーザーを取得します。2.
しかし、それはこのに切り替えした場合:
$users = User::where('username', 'LIKE', "%{$query}%")
->where('role', 2)
->orderBy('last_login', 'desc')
->paginate(7);
、それが唯一の役割2.
からユーザーを取得し、突然のすべてが、ですが、なぜでしょうか?これが意味をなさないので、私は何かを明らかにしていないように感じる。
EDIT
BassemエルHachemさんを受けて、私は、クエリの最初に役割= 2を入れました。しかし、それはまだ動作しません。ここでは変更後のクエリは次のとおりです。
「
users
どこrole
=と(id
)、、、、、 、(中???????)または(id
中(SELECT * FROM? ( ?、?、?、?))または(username
LIKE?または)であることを特徴とする請求項1に記載の方法。 ???SQLでクエリはこれですので、だlast_login
DESC」
新しい回答をお試しください。他の 'どこ 'はすべて' OR'ですか、別の必須の場所ですか? –
新しい回答が動作します。 –