2015-09-15 3 views
1

У меня есть этот простой запрос, где у меня есть массив $posts, содержащий ID определенных сообщений. И я выбираю файлы, связанные с этими сообщениями в основном:Zend Framework 2 "select where not in"

 ->from(
      ['DO' => 'DOCUMENT'] 
     ) 
     ->columns(
      [ 
       'POST_ID', 
       'FILENAME' 
      ] 
     ) 
     ->where('DO.FILENAME LIKE "%'.$format.'%"') 
     ->where(['DO.POST_ID' => $posts]) 
     ->order('DO.FILENAME DESC'); 

Теперь я хочу выбрать файлы, которые не имеют отношения к этим сообщениям. Поэтому мне нужно сделать противоположное:

 ->where(['DO.POST_ID' => $posts]) 

Не могу понять, как?

ответ

1

Вы должны использовать NOT IN операцию

->from(
      ['DO' => 'DOCUMENT'] 
     ) 
     ->columns(
      [ 
       'POST_ID', 
       'FILENAME' 
      ] 
     ) 
     ->where('DO.FILENAME LIKE "%'.$format.'%"') 
     ->where->addPredicate(new Zend\Db\Sql\Predicate\Expression('DO.POST_ID NOT IN (?)', array($posts))) 
     ->order('DO.FILENAME DESC'); 
+0

Это doens't работу :(Это говорит 'Призыв к неопределенному методу Zend \ Db \ Sql \ Где :: порядка()', если я ставлю свое решение там –

+0

Переместите метод '-> order()' в 'select-> order()', а не в 'where-> order()'. Я не могу дать вам полный код для этого, так как вы didn 't отправил его. – Stanimir

+0

, который сработал, спасибо! –