Laravel / Eloquent WHERE NOT SUBQUERY

Posted

技术标签:

【中文标题】Laravel / Eloquent WHERE NOT SUBQUERY【英文标题】: 【发布时间】:2017-08-30 02:48:41 【问题描述】:

我无法设置这样的负面条件:

WHERE NOT( "last_day" "<=" $first_day OR "first_day" "<=" $last_day)

我的查询生成器看起来像这样的 atm:

$query = $query->where(function ($query) use ($first_day, $last_day) 
   $query->where('last_day', '<=', $first_day);
   $query->orWhere('first_day', '<=', $last_day);
);

我希望它是这样的:

$query = $query->whereNot(function ($query) use ($first_day, $last_day) 
  $query->where('last_day', '<=', $first_day);
  $query->orWhere('first_day', '<=', $last_day);
);

回顾一下:我想要一个否定的 WHERE 条件中的 OR 语句。我怎样才能做到这一点?

来源:http://baodad.blogspot.nl/2014/06/date-range-overlap.html

【问题讨论】:

我不认为你的操作数是正确的。你到底在检查什么? 他们确实不是,我会编辑并完全指定 基本上我想做的是:***.com/questions/325933/… 【参考方案1】:

你可以玩逻辑

$query = $query->where(function ($query) use ($first_day, $last_day) 
   $query->where('last_day', '>', $first_day);
   $query->where('first_day', '>', $last_day);
);

【讨论】:

我不认为逻辑是一样的,它不符合条件:“艾伦区间代数”:en.wikipedia.org/wiki/Allen%27s_interval_algebra 更改:$query->where('first_day', '>', $last_day);到 $query->where('first_day', '***.com/questions/43233652/…【参考方案2】:

根据此处找到的答案恢复约束:Eloquent mysql statement : WHERE NOT(A OR B)

$query = $query->where('last_day', '>', $first_day)->where('first_day', '>', $last_day);

【讨论】:

以上是关于Laravel / Eloquent WHERE NOT SUBQUERY的主要内容,如果未能解决你的问题,请参考以下文章

Eloquent:find() 和 where() 用法 laravel

Laravel Eloquent - 返回 Where Has + Where [重复]

如何处理带有斜线的 Laravel Eloquent “WHERE”查询? (Laravel 5.3)

如何使用 Laravel Eloquent 创建多个 Where 子句查询?

如何使用 Laravel Eloquent 创建多个 Where 子句查询?

Laravel Eloquent LEFT JOIN WHERE NULL