型号“CartItem”与型号“产品”无关,但它是?

时间:2013-07-21 12:58:54

标签: cakephp cakephp-appmodel

我正在写一个CakePHP插件。在我的插件中AppModel我有:

public $actsAs = array(
    'Containable'
);

然后我有两个模型:CartItemProduct。我的CartItem模型看起来像这样:

<?php
class CartItem extends ShoppingCartAppModel {

    public $belongsTo = array(
        'Cart',
        'Product'
    );
}

但是,在我的控制器中调用Cart模型时,我收到以下错误:

  

警告(512):模型“CartItem”与模型“Product”无关[CORE / Cake / Model / Behavior / ContainableBehavior.php,第344行]

为什么这样,当我定义我的CartItem模型通过Product关联与belongsTo模型相关联时?

编辑:我已将问题范围缩小到我尝试在Cart模型中获取购物车及其内容的位置。这是电话:

public function findBySessionId($sessionId) {
    $cart = $this->find('first', array(
        'conditions' => array(
            'Cart.session_id' => $sessionId
        ),
        'contain' => array(
            'CartItem' => array(
                'Product'
            )
        )
    ));
    return $cart;
}

2 个答案:

答案 0 :(得分:2)

模型关联需要插件前缀

从问题来看,购物车模型很可能是这样定义的:

    public $hasMany = array(
        'CartItem'
    );
}

这意味着Cake期待以下内容:

app
    Model
        CartItem.php <- 'CartItem' means the model is in the App, not a plugin
    Plugin
        Model
            Cart.php

App CartItem模型不存在,因此将是AppModel的实例。

在定义模型关联时,始终确保使用插件前缀(如果适用):

    public $hasMany = array(
        'ShoppingCart.CartItem' // Load the model from this same plugin
    );
}

答案 1 :(得分:0)

找出问题所在。插件中的模型需要类名中的插件名称。

例如:

<?php
class Cart {

    public $hasMany = array(
        'CartItem' => array(
            'className' => 'ShoppingCart.CartItem'
        )
    );
}

仅在关联名称中指定插件名称会导致我出现SQL错误,因此您可以通过手动指定类名 - 使用插件前缀来规避。