在任何阅读谷歌等的建议之前,我必须写下我读了很多文章和博客,现在我无法弄清楚如何在我的案例中使用HABTM ......;]
我有3个表和3个模型的订单系统:
现在我和ORDERS< - > CUSTOMERS之间有关系(工作正常),但我需要'链接表',其中order_id
,product_id
,{{1} }。
要清楚,
一个客户可以拥有多个订单(但一个订单可以有一个客户)
(正常秩序系统哲学)
在订单视图中,我必须包含“item”,“customer”和“order”的详细信息,例如:
quantity
我不知道我是否必须使用hasMany或hasAndBelongsTo,并为'link table'创建另一个模型?
任何人都可以在cakephp 2.x中向我解释这个美丽的sh **吗? ; - )
答案 0 :(得分:0)
这种情况没有什么独特之处,你在其他地方找不到。
使用型号名称
Order (order_id, customer_id, paymentOption, etc...)
Item (item_id, size, color, etc...)
Customer (customer_id, name, telephone, etc...)
OrderItem (order_id, item_id)
关系
Order belongsTo Customer
Order hasMany OrderItem
Item hasMany OrderItem
Customer hasMany Order
OrderItem belongsTo Order
OrderItem belongsTo Item
如果您正在查找订单的详细信息,可以
find('first', array(
'conditions' => array(
'Order.id' => $order_id // which would have to be defined earlier, perhaps from a param passed in the route
),
'contain' => array(
'Customer',
'OrderItem => array(
'Item'
)
)
));
同样,很容易通过客户提取所有订单,按特定项目的所有订单,客户下订单的总次数,订购商品的时间总和以及a的总和次数客户订购了特定商品等等
答案 1 :(得分:0)
@bowlerae: 我之前找到了这个解决方案,它在我的查询中工作了50%,我有代码:
$products = $this->Order->find('first', array(
'contain' => array (
'Customer',
'OrderItem' => array(
'Item'
)
)
));
上面的(省略数组'Order'和'Customer' - 现在不重要了):
array(
'OrderItem' => array(
(int) 0 => array(
'order_id' => '1',
'item_id' => '4',
'quantity' => '2',
'Item' => array()
),
(int) 1 => array(
'order_id' => '1',
'item_id' => '6',
'quantity' => '1',
'Item' => array()
),
(int) 2 => array(
'order_id' => '1',
'item_id' => '7',
'quantity' => '1',
'Item' => array()
),
(int) 3 => array(
'order_id' => '1',
'item_id' => '8',
'quantity' => '1',
'Item' => array()
)
)
)
1.那么我现在如何获得所有“产品”?我从类似的东西开始,但我知道这很糟糕因为我必须写['0'] ... ['1] ...这是动态变量
<?php echo h($products['OrderItem']['0']['item_id']); ?>
2.你可以看到
'Item'=&gt;阵列()
为null ;-)所以我无法从Item表/模型中获取项目的名称