Несколько как в запросе с ИЛИ

Мне нужно добавить в эту 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();

2 ответа

Решение

Это должно работать, если вы действительно хотите использовать выражения 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%"
    ]
])

Это не лучший способ, но это может сработать:

 $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 может помочь

Другие вопросы по тегам