我正在使用CakePHP 2.3.x构建一个电子商务网站,该网站的HABTM关系中的Product
模型与Order
模型相关联,我正在使用orders_products
作为我的联系表。我让所有关联正常工作,并在find()
模型上执行Order
会显示所有相关产品。我的问题是,如果无法找到Product
,我正试图让关联仍然存在。
我正在关联表中保存相关信息,但是如果没有找到Product
模型,我找不到建立关联的方法。我在关联中存储了项目名称,销售时价格等信息,因此控制器和视图可以补偿可能已被删除的项目,以某种方式更改ID或其他任何可能发生的项目。
我已经搜索了所有但似乎找不到比手动为连接表构建查询更好的解决方案。是否有适当的Cake方法,或者我应该使用单独的模型,如OrderProduct
?
以下是Order
模型:
class Order extends AppModel {
public $name = 'Order';
public $belongsTo = array('User');
public $hasAndBelongsToMany = array(
'Product' => array(
'className' => 'Product',
'joinTable' => 'orders_products',
'foreignKey' => 'order_id',
'associationForeignKey' => 'product_id',
'unique' => 'keepExisting'
)
);
}
这是Product
模型:
class Product extends AppModel {
public $name = 'Product';
public $belongsTo = array('Category', 'Brand');
public $hasMany = array('ProductPhoto');
public $hasAndBelongsToMany = array(
'Order' => array(
'className' => 'Order',
'joinTable' => 'orders_products',
'foreignKey' => 'product_id',
'associationForeignKey' => 'order_id',
'unique' => 'keepExisting'
)
);
TLDR版本:当我$this->Order->find('first', $options)
时,我会在返回的Order
数据中获取所有产品,但前提是联接表(orders_products
)与{ {1}}模型。无论是否可以在数据库中找到Product
,我都试图在返回的数据中创建连接表结果$data['Order']['OrderProduct']
。