【问题标题】:How to make Criteria on SELECT CASE in Symfony 1.4 Propel如何在 Symfony 1.4 Propel 中制定 SELECT CASE 标准
【发布时间】:2013-02-06 16:44:29
【问题描述】:

我正在寻找一种在 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 条件只是示例,我会使用更复杂的条件。

【问题讨论】:

  • 你看过here吗?
  • @j0k 我尝试使用此代码,但在最好的情况下我有“注意:未定义的偏移量”。

标签: php symfony-1.4 criteria propel


【解决方案1】:

您可以在 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);

【讨论】:

    【解决方案2】:

    您可以使用“withColumn”语句,然后自定义您的查询

    ->withColumn("CASE WHEN CLIENTE_ID = {$cliente->getId()} THEN 'Pontos Pessoais' ELSE 'Pontos de Equipe' END", 'descricao')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多