0

抱歉,如果标题错过了我的目标,但不知道如何命名。这是我的任务:

我有一个购物车,其中包含属于价格 (1:1) 的多个项目 (1:n)。

物品和价格之间的关系也在起作用:

class Item extends AppModel {

    public $hasOne = 'Price';
}

class Price extends AppModel {

public $belongsTo = array(
    'Item' => array(
                'className' => 'Item',
                'foreignKey' => 'id'
            )
    );
}

但是现在我选择(查找)了一个购物车并希望包含这些物品,这也可以正常工作:

class CartItem extends AppModel {

    public $useTable = 'cart_items';

    public $belongsTo = array('Item', 'Address');
}

但我真正需要的是获取每个项目的价格,这是行不通的(项目模型中的 afterFind()-Callback 中的 $result 不包括分配的价格和价格模型中的 afterFind()-Callback 不被调用找到购物车时)..

我在这里想念什么?

/编辑:最近的变化:

class AppModel extends Model {
    var $actsAs = array('Containable');
}


class CartsController extends AppController {

public function getCart() {
$cart = ClassRegistry::init('CartItem')->find('all', array(
                    'contain' => array(
                        'Item' => array(
                            'Price'
                        ),
                        'Address'
                    ),
                    'conditions' => array(
                        'id_cart' => $cart['Cart']['id']
                    )
                ));
}

上述更改导致我将在找到的项目中获得价格,但仅在找到的最后一个项目中获得价格。

4

1 回答 1

1

你没有显示你的实际find(),但我怀疑你没有设置适当的'recursive'参数或没有使用'contain'.

我更喜欢使用从 AppModel 启用的可包含行为:

var $actsAs = array('Containable');

然后您可以执行以下操作:

$cartItem = $this->CartItem->find(
  'first',
  array(
    'contain' => array(
      'Item' => array(
        'Price'
      ),
      'Address'
    ),
    'conditions' => array('CartItem.id' => 123)
  )
);
于 2013-09-06T07:49:54.177 回答