【问题标题】:Laravel/SQL: return rows where column Equals NOT 'something" and NULLLaravel/SQL:返回列等于 NOT 'something' 和 NULL 的行
【发布时间】:2019-01-23 17:43:07
【问题描述】:

LARAVEL 5.4(但可能是更一般的 SQL 问题)

你好!我有一个结构表:

假设它是我的模型“表”。

我想要一个查询:

使用(接收)变量:

$id 的数组 ['id', 'string', integer]

其中字符串是 ''

$status_not_bad = bool;

(如果为 true - 包括 'status' !== 'bad' AND 'status' IS NULL 的所有行);

例如,我们给出:

$id = ['id', '>', 0];

$status_not_bad = true;

Table::thisquery() ... ->get();

“获取状态不错且 id > 0 的行”返回第 1 行和第 3 行。

但如果我们给出:

$id = ['id', '<', 3];

$status_not_bad = true;

Table::thisquery() ... ->get();

“获取状态不错且id

(应该是使用这些变量返回这些结果的相同查询)。

【问题讨论】:

    标签: sql laravel query-builder


    【解决方案1】:

    只需链接您的 -&gt;where() 子句。也许还可以考虑包装它们以防止与任何其他内容发生冲突:

    $results = Table::where("id", ">" 0)
    ->orWhere("number", ">", 2)
    ->orWhereNull("status")
    ->get();
    

    或者,包装:

    $results = Table::where(function($query){
      $query->where("id", ">" 0)
      ->orWhere("number", ">", 2)
      ->orWhereNull("status");
    })->get();
    

    如果您想查看您正在执行的实际查询是什么,请将-&gt;get() 替换为-&gt;toSql(),并使用dd($result);

    $results = Table::where(...)->toSql();
    dd($results);
    

    编辑:听起来我们需要多个包装查询,由于多个条件:

    $results = Table::where(function($query){
      $query->where("status", "!=", "bad")
      ->where("id", "<", 3); -- "status is not bad and id < 3"
    })->orWhere(function($query){
      $query->where("status", "!=", "bad")
      ->where("id", ">", 0); -- "status is not bad and id > 0"
    })->get();
    

    这应该处理您评论中提到的配对条件。

    【讨论】:

    • 嗨,蒂姆!不,这不是我想要的...我想要一个查询,“获取状态不错且 id 0 的行”将返回第 1 行和第 3 行。(应该是相同的查询)。
    • 好的,所以链接一些包装 -&gt;where/-&gt;orWhere 查询。我会进行编辑。
    • 蒂姆,谢谢)可能我的问题解释错了。我现在要重写它。
    • 你为什么要发布一个新问题?你应该刚刚编辑了这个。那个新的很可能会作为这个的副本被关闭。
    【解决方案2】:

    我以前从未使用过 laravel,所以我的语法可能是关闭的,但我知道你想为此使用 MySQL 的 ifNull 函数:

    Table::where([['id', '>', 0], ['number', '>', 2])->whereRaw("IfNull(status, 'blah') <> 'bad'")->get();
    

    【讨论】:

      猜你喜欢
      • 2019-01-23
      • 1970-01-01
      • 2011-05-26
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      • 2013-01-12
      • 2011-06-07
      相关资源
      最近更新 更多