我正在写一个CakePHP插件。在我的插件中AppModel
我有:
public $actsAs = array(
'Containable'
);
然后我有两个模型:CartItem
和Product
。我的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;
}
答案 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错误,因此您可以通过手动指定类名 - 使用插件前缀来规避。