0

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!

Andreea
  • 139
  • 12
  • I solve the query using `Expresion`, like this `$where = "users.username LIKE '%".$search."%' OR (users_metas.meta_key = 'name' AND users_metas.meta_value LIKE '%$search%'))"; $select->where(new Expression($where));`. But if it's any other way to do it i would like to try different. Thanks! – Andreea Nov 06 '15 at 12:40

1 Answers1

2
$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');
Ed209
  • 821
  • 5
  • 8