laravel雄辩的逻辑运算符

时间:2018-02-28 11:35:40

标签: php laravel-5

如何在laravel Eloquent中以 AND OR NOT 的逻辑运算符连接两个查询

选择titleauthor 其中( TITLE LIKE%computer%或SUBJECT LIKE%computer%

AUTHOR LIKE%thomas% IMPRINT LIKE%thomas%

1 个答案:

答案 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();