【问题标题】:Multiple like in a query with OR多个类似 OR 的查询
【发布时间】:2016-01-04 11:24:27
【问题描述】:

我需要在这个 cakephp 3 中添加另一个“喜欢”,查询还必须检查 last_name 字段。我该怎么做,我想尊重 CakePHP 3 规则。谢谢。

 $users = $this->Users
        ->find()
        ->where(function ($q) use ($keyword) {
            return $q
            ->like('Users.first_name', "%$keyword%");
            // OR ->like('Users.last_name', "%$keyword%");
        })
        ->limit(5)
        ->toArray();

【问题讨论】:

    标签: php cakephp cakephp-3.x


    【解决方案1】:

    如果你真的想使用 cakephp 表达式,这应该可以工作

    ->where(function ($q) use ($keyword) {
        return $q
            ->or_($q->like('Users.first_name', "%$keyword%"))
            ->like('Users.last_name', "%$keyword%");
    
        })
    

    但你可以简单地做

    ->where([
        'OR' => [
            'Users.first_name LIKE' => "%$keyword%",
            'Users.last_name LIKE' => "%$keyword%"
        ]
    ])
    

    【讨论】:

      【解决方案2】:

      这不是最好的方法,但这可能有效:

       $users = $this->Users
              ->find()
              ->where(function ($q) use ($keyword) {
                  return $q
                  ->like('Users.first_name', "%$keyword% OR Users.last_name LIKE %$keyword%");
              })
              ->limit(5)
              ->toArray();
      

      如果这不起作用,CakePHP Documentation 的这一部分可能会有所帮助

      【讨论】:

      • 您好,感谢您的帮助,刚刚试了下,查询无效。
      • 一个正常的(原始)sql 查询你想要做什么通常会像SELECT * FROM Users WHERE Users.first_name LIKE '%$keyword%' OR Users.last_name LIKE '%$keyword%' LIMIT 5,但是使用CakePHP,我不太确定你会怎么做关于这样做。然而,在上面链接的 CakePHP 文档中,它显示您可以进行原始 SQL 查询,因此我建议您尽可能地研究一下。真的,这取决于您如何设置所有内容。
      • @Axiom 如果你想实现 SQL 注入漏洞,你只会那样做 :)
      • @ndm 好吧,我想既然它是作为 %$keyword$ 传入的,CakePHP 本身会自动清理 like() 函数中的参数。否则,是的,您需要在将 $keyword 变量传递给 like() 函数之前对其进行清理。
      • 我只是指您的原始查询示例;)
      猜你喜欢
      • 1970-01-01
      • 2016-02-28
      • 2011-06-12
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多