我正在使用 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
) 与Product
模型匹配。我正在尝试$data['Order']['OrderProduct']
在返回的数据中生成连接表结果,无论是否Product
可以在数据库中找到。