0

これが私の最初の質問ですので、我慢してください:)

オブジェクトを作成する奇妙な動作に遭遇しました。

基準が可能な場合はクエリを使用すべきではないと言われたのでobjectQuery::create()-> ... ->find()、プロジェクトで使用されているメソッドをに変換し始めました。$c = new Criteria(), $c-> ... objectPeer::doSelect($c)

ショップからの商品のすべての価格を返す機能があります。または少なくともしました。私が理解できないことはこれです:

古いコード:

static public function shopGetPrices($id){

    $prices = itemPriceQuery::create()->
        addJoin(itemPricePeer::ITEM_ID, itemPeer::ID, Criteria::LEFT_JOIN)->
        addJoin(itemPeer::CATEGORY_ID, categoryPeer::ID, Criteria::LEFT_JOIN)->
        addJoin(categoryPeer::SHOP_ID, shopPeer::ID, Criteria::LEFT_JOIN)->
        add(shopPeer::ID, $id)->find();

    return $prices;
}

正しく入力されたオブジェクトを返しますPropelObjectCollection。これにより、foreachを使用して、必要なitemPriceオブジェクトと属性を取得/設定できます。

今、新しいコード:

static public function shopGetPrices($id){

    $c = new Criteria();
    $c->addJoin(itemPricePeer::ITEM_ID, itemPeer::ID, Criteria::LEFT_JOIN)->
        addJoin(itemPeer::CATEGORY_ID, categoryPeer::ID, Criteria::LEFT_JOIN)->
        addJoin(categoryPeer::SHOP_ID, shopPeer::ID, Criteria::LEFT_JOIN)->
        add(shopPeer::ID, $id);

    return self::DoSelect($c);
}

オブジェクトの配列を返しますが、itemPricejoinを介してitemPriceオブジェクトに関連するアイテム値が入力されます。つまり:私がprint_r(self::DoSelect($c));それを呼び出すと、

 Array
 (
  [0] => ItemPrice Object
    (
        [startCopy:protected] => 
        [id:protected] => 47 <- id of joined item
        [item_id:protected] => 9 <-foreign key to category object of joined item
        [price:protected] => 0 
        [unit:protected] => Axe <- name of item, not unit (unit is like 'golden', 'iron', 'wood' or whatever )
        [active:protected] => 
        [collItemsOrder:protected] => 
        [collItemsOrderPartial:protected] => 
        [alreadyInSave:protected] => 
        [alreadyInValidation:protected] => 
        [polozkyObjednavkasScheduledForDeletion:protected] => 
        [prisadyPolozkyObjednavkasScheduledForDeletion:protected] => 
        [validationFailures:protected] => Array()
        [_new:protected] => 
        [_deleted:protected] => 
        [modifiedColumns:protected] => Array()
        [virtualColumns:protected] => Array()

    )

[1] => ItemPrice Object
    (

...等々。

基準とクエリオブジェクトの間にはおそらくいくつかの決定的な違いがありますが、私には欠けています。私はGoogle、StackOverflowで検索しましたが、誰がどこにいるのかを知っていますが、これに対する解決策に似たものは見つかりませんでした。

この男/ギャルは漠然と同様の問題を抱えていましたが、私は自分の基準で使用しなかったaddSelectColumnので、それは私にとって別の行き止まりでした。

誰かが私を正しい方向に向けてくれませんか?

4

1 に答える 1

0

問題が見つかりました。クラスでメソッドdo selectをオーバーライドしていたということでしたitemPricePeer

public static function doSelect(Criteria $criteria, PropelPDO $con = null){

    $critcopy = clone $criteria;
    $critcopy->add(self::ACTIVE, 1);

    return self::populateObjects(itemPeer::doSelectStmt($critcopy, $con));

}

in引数で切り替えself/itemPricePeerました。ばかげた私:-/ j0k とにかくあなたの応答に感謝します。itemPeerpopulateObjects

于 2012-08-30T23:58:13.763 に答える