Cakephp 模型";CartItem“;与“模型”不关联;产品「;但它是吗?
我正在写一个CakePHP插件。在我的插件的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
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'
)
);
}