【问题标题】:Laravel / Eloquent WHERE NOT SUBQUERYLaravel / 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

【问题讨论】:

标签: php mysql laravel-5 eloquent laravel-eloquent


【解决方案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', 'stackoverflow.com/questions/43233652/…
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2014-12-08
    • 2015-07-05
    • 2014-08-14
    • 2017-11-28
    • 1970-01-01
    • 2018-02-21
    • 2020-07-09
    • 1970-01-01
    • 2019-09-06
    相关资源
    最近更新 更多