在具有OR的查询中有多个相似项


Multiple like in a query with OR

我需要在这个cakehp3中添加另一个"like",查询也必须在last_name字段中进行检查。我该怎么做呢?我想尊重CakePHP3规则。谢谢

 $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();

如果您真的想使用cakepp表达式,这应该会起作用

->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%"
    ]
])

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

 $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文档的这一部分可能会帮助