我正在寻找一种基于Symfony 1.4中的SQL来制作Criteria的方法:
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 :(得分:0)
您可以在Query.php类中使用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类(或没有函数调用的动作类)中类似地构建$ criteria对象:
// 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);
答案 1 :(得分:0)
您可以使用语句“ withColumn”,然后自定义查询
-> withColumn(“ CLIENTE_ID = {$ cliente-> getId()}的情况然后'Pontos Pessoais'ELSE'Pontos de Equipe'END”,'descricao')