0

Symfony 1.4 でこの SQL に基づいて基準を作成する方法を探しています。

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

この投稿の例を使用しようとしまし
たが、役に立ちません

$criteriaアイテムのリストをレンダリングし、アイテムを でソートするプラグインに後で渡されるため、を作成することが重要$criteriaです。

WHEN条件は一例です。より複雑な条件を使用します。

4

2 に答える 2

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);
于 2013-03-26T18:43:50.537 に答える