2016-06-21 2 views
0

Привет Я использую PHP Silex с Builder запросов Doalrine DBAL (без ORM) и SQLite. Это своего рода работы, поэтому я могу построить запрос, и он отплевывает результаты, но я для жизни меня не могу заставить параметры настройки работать (я получаю пустой массив все время).Параметры Doctrine DBAL не работают

Вот что работает:

$qb->select('*') 
      ->from('photos') 
      ->where("country = '".$country."'") 
      ->andWhere('status = 1') 
      ->orderBy($sort[0], $sort[1]) 
      ->setFirstResult($start) 
      ->setMaxResults($limit) 

По очевидным причинам я хотел бы заменить это:

$qb->select('*') 
      ->from('photos') 
      ->where("country = ?") /// <-- 
      ->andWhere('status = 1') 
      ->orderBy($sort[0], $sort[1]) 
      ->setFirstResult($start) 
      ->setMaxResults($limit) 
      ->setParameter(0, $country) /// <-- 

Или:

$qb->select('*') 
      ->from('photos') 
      ->where("country = :country") /// <-- 
      ->andWhere('status = 1') 
      ->orderBy($sort[0], $sort[1]) 
      ->setFirstResult($start) 
      ->setMaxResults($limit) 
      ->setParameter(':country', $country) /// <-- 

Или даже:

$qb = $this->db->createQueryBuilder(); 
$expr = $qb->expr(); 
$qb->select('*') 
      ->from('photos') 
      ->where($qb->expr()->andX(
       $qb->expr()->eq('country', '?1'), /// <-- 
       $qb->expr()->eq('status', 1) 
      )) 
      ->orderBy($sort[0], $sort[1]) 
      ->setFirstResult($start) 
      ->setMaxResults($limit) 
      ->setParameter(1, $country) /// <-- 

Это все примеры установки параметров, которые я нашел в документах, однако ни один из них не работает, и я не уверен, как отлаживать это. Проверка $ qb-> getSQL() и $ qb-> getParams() не показывает ничего полезного.

Im используя ("doctrine/dbal": "~2.2") если это имеет значение.

+0

Можете ли вы уточнить, что «похоже, не работает», результаты не возвращаются? – mickadoo

+0

Точно. Нет ошибки. Просто пустой массив результатов. Первый способ возвращает строки, как ожидалось. Только что показали изменения. – konrad

+0

Вы пробовали '-> setParameter ('страна', $ country)' (без двоеточия) – mickadoo

ответ

0

Я пришел к своему собственному вопросу случайно, потому что я решил это давно, и, конечно, это оказалось глупо. Проблема заключалась не в правильном построении запроса, а в правильном использовании. Вот ответ для дальнейшего использования.

С Query Builder не делают:

$this->db->fetchAll($qb->getSQL()); 
// you get query with unfilled placeholders 

, а скорее:

$qb->execute()->fetchAll(); 

Спасибо всем, кто пытался помочь!

Смежные вопросы