如何在laravel Eloquent中以 AND OR NOT 的逻辑运算符连接两个查询
选择title
,author
其中( TITLE
LIKE%computer%或SUBJECT
LIKE%computer%)
不
( AUTHOR
LIKE%thomas%或 IMPRINT
LIKE%thomas%)
答案 0 :(得分:0)
首先,您的查询不是那样的。
假设您的表确实名为book1
,则查询可能是这样的:
SELECT TITLE, AUTHOR FROM book1
where (Title like 'computer' or Subject like 'computer')
AND NOT (imprint like 'delhi' or series like 'abc')
现在,如果你有一个名为Book1的雄辩模型,你可以将查询表达为:
Book1::where(function ($query) {
$query->where('title', 'like', 'computer');
$query->orWhere('subject', 'like', 'computer');
})->where(function ($query) {
$query->where('imprint', 'not like', 'delhi');
$query->orWhere('series', 'not like', 'abc');
})->get();
希望这有帮助。
编辑:
要回答您的评论,您可以通过使用内部函数来连接多个查询(并创建分组)。内部函数中的所有内容都写在括号内。 因此上述查询将是:
SELECT * FROM Book1 WHERE
( title like 'computer' OR subject like 'computer' )
AND
( imprint not like 'delhi' OR series not like 'abc' )
如果您希望同时使用OR
而不是AND
进行连接,则可以在Eloquent中通过orWhere
代替where
进行组合。
Book1::where(function ($query) {
$query->where('title', 'like', 'computer');
$query->orWhere('subject', 'like', 'computer');
})->orWhere(function ($query) {
$query->where('imprint', 'not like', 'delhi');
$query->orWhere('series', 'not like', 'abc');
})->get();