Andreea
Andreea

Reputation: 139

Zend\Db\Sql\Select multiple where (combination between AND and OR)

I'm a little stuck at a query with multiple where. I want to 'translate' the query bellow in my Zend\Db\Sql\Select query:

SELECT `users`.*, `users_metas`.* 
FROM `users` INNER JOIN `users_metas` ON `users`.`ID` = `users_metas`.`parent_id` 
WHERE `role` = 'admin' 
AND ( 
         `users`.`username` like '%q_word%' 
      OR
         (`users_metas`.`meta_key` = 'name' 
              AND 
          `users_metas`.`meta_value` like '%q_word%')
    )
 ORDER BY `date_added` ASC

I tried something like this:

$select = new Select();
$select->where(array('role' => 'admin')); 
$select->join('users_metas', 'users.ID = users_metas.parent_id');

but I'm stuck to this where:

AND ( 
         `users`.`username` like '%q_word%' 
      OR
         (`users_metas`.`meta_key` = 'name' 
              AND 
          `users_metas`.`meta_value` like '%q_word%')
)

Thank you!

Upvotes: 0

Views: 439

Answers (1)

Ed209
Ed209

Reputation: 821

$where = new Where();
$where
    ->equalTo('role', 'admin')
    ->nest()
    ->like('users.username', '%q_word%')
    ->or
    ->like('users_metas.meta_key', 'name')
    ->or
    ->like('users_metas.meta_value', '%q_word%')
    ->unnest();


$select = new Select();
$select
    ->from('users')
    ->join('users_metas', 'users.ID = users_metas.parent_id')
    ->where($where)
    ->order('date_added');

Upvotes: 2

Related Questions