Cakephp 模型";CartItem“;与“模型”不关联;产品「;但它是吗?

Cakephp 模型";CartItem“;与“模型”不关联;产品「;但它是吗?,cakephp,cakephp-model,Cakephp,Cakephp Model,我正在写一个CakePHP插件。在我的插件的AppModel中,我有: public $actsAs = array( 'Containable' ); 然后,我有两种型号:一种是CartItem,另一种是Product。我的CartItem型号如下所示: <?php class CartItem extends ShoppingCartAppModel { public $belongsTo = array( 'Cart', 'Prod

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

public $actsAs = array(
    'Containable'
);
然后,我有两种型号:一种是
CartItem
,另一种是
Product
。我的
CartItem
型号如下所示:

<?php
class CartItem extends ShoppingCartAppModel {

    public $belongsTo = array(
        'Cart',
        'Product'
    );
}
模型关联需要一个插件前缀 从问题来看,购物车模型的定义可能如下:

这意味着Cake期望以下方面:

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

解决了问题。插件中的模型需要在类名中包含插件名

例如:

<?php
class Cart {

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

我正在尝试从我的
购物车
模型中加载
购物车项目
s(以及相关的
产品
s)。我将用示例调用更新我的问题。那么我如何修复它,以便从
购物车
访问每个
购物车项目
产品
?在使用
Containable
行为之前,我没有遇到过这个问题。它是
AppModel
,但我确信我的模型的名称正确:CartItem.php。这是因为它在插件中而不是“主”应用程序中吗?这是一种不同的排列形式“模型文件被错误命名”我已经更新了答案我想,但是当我添加
购物车。
前缀时,我得到一个SQL错误:
错误:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行的“`CartItem` WHERE`ShoppingCart`.`CartItem`.cart\u id=(2)”附近使用的正确语法?难道你不需要$this->CartItem->find,否则它只会使用通用的appModel类吗?!在我的
CartController
中,我希望能够获取用户的购物车,以及购物车中的
CartItem
s和相关的
产品
s,以便我可以向用户显示它。
仅在关联名称中指定插件名称
-如果您指的是数组键,这是关联别名-在其中添加
只会造成一般的混乱。简写语法(
$hasMany=>array('Plugin.Model')
)等同于完整语法(
$hasMany=>array('Model'=>array('className'=>'Plugin.Model'))
-还有更多内容。无论如何,很高兴您找到了问题的解决方案。是的。正如我所说,当我将插件名称放入数组键/关联别名时,它触发了SQL错误。
app
    Model
        CartItem.php <- 'CartItem' means the model is in the App, not a plugin
    Plugin
        Model
            Cart.php
    public $hasMany = array(
        'ShoppingCart.CartItem' // Load the model from this same plugin
    );
}
<?php
class Cart {

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