2013-02-21 1 views
0

Я ищу способ сделать критерии, основанные на этом SQL в Symfony 1.4:Как сделать критерии на Select Case в Symfony 1.4 Propel

SELECT item.position, 
CASE 
    WHEN item.position = 1 THEN item.position + 1 
    WHEN item.position = 2 THEN item.position - 1 
    ELSE item.position 
END AS new_position 
FROM item ORDER BY new_position ASC 

Я пытался использовать пример из this post,
но это не помогло

Важно сделать $criteria, потому что он затем передается плагину, который отображает список элементов и сортирует товары по $criteria.

WHEN Состояние есть только пример, я буду использовать более сложные условия.

+0

Вы посмотрели [здесь] (https://groups.google.com/forum/?fromgroups=#!topic/propel-users/MF9H_V7Mijc)? – j0k

+0

@ j0k Я пытался использовать этот код, но в лучшем случае у меня есть «Notice: Неопределенное смещение». – skyner87

ответ

0

Вы можете использовать переключатель PHP в классе Query.php строить критерии (так как ваш вопрос показывает упрощенный пример, переключатель необходим для критериев может быть гораздо сложнее):

//in YourModelQuery.php 
public function addMyItemPositionCriteria($itemPosition) { 
    //TODO: validate $itemPosition values as needed 
    switch ($itemPosition) { 
     case 1: 
      return $this->add([$criteria see http://api.propelorm.org/1.6.8/ browse propel.runtime.query Criteria and ModelCriteria classes ]); 
      break; 
     case 2: 
      return $this->add([$criteria here]); 
      break; 
     } 
} 

Или вы аналогичным образом можно построить $ критерии объекта в классе ModelPeer.php (или класса действий без вызова функции):

// in MyObjectPeerClass.php 
public static function addMyItemPositionCriteria($itemPosition) { 
    //TODO: validate $itemPosition values as needed 
    $criteria = new Criteria; 
    switch ($itemPosition) { 
     case 1: 
      return $criteria->add([$criteria see http://api.propelorm.org/1.6.8/ browse propel.runtime.query Criteria and ModelCriteria classes ]); 
      break; 
     case 2: 
      return $criteria->add([$criteria here]); 
      break; 
     } 
} 

Вы можете поместить этот критерий для использования:

//depending on context 
// in ModelQuery.php call 
    $this->addMyItemPostion($itemPosition); 
// call to model query 
    ModelQuery::create()->addMyItemPosition($itemPosition)->find(); 
//in action or somewhere else (adding to previously defined $criteria) 
    $new_criteria = MyObjectPeerClass::addMyItemPosition($itemPosition); 
    $criteria->add($new_criteria); 
Смежные вопросы