cakephp和habtm中的链接表

时间:2013-08-17 20:34:14

标签: cakephp cakephp-2.0 has-and-belongs-to-many cakephp-2.3 jointable

在任何阅读谷歌等的建议之前,我必须写下我读了很多文章和博客,现在我无法弄清楚如何在我的案例中使用HABTM ......;]

我有3个表和3个模型的订单系统:

  1. ORDERS(order_id,customer_id,paymenyOption等...)
  2. ITEMS(item_id,尺寸,颜色等......)
  3. 客户(customer_id,姓名,电话等......)
  4. 现在我和ORDERS< - > CUSTOMERS之间有关系(工作正常),但我需要'链接表',其中order_idproduct_id,{{1} }。

    要清楚,

    • 一个订单可以包含多个商品
    • 一个项目可以有多个订单
    • 一个客户可以拥有多个订单(但一个订单可以有一个客户)

      (正常秩序系统哲学)

    在订单视图中,我必须包含“item”,“customer”和“order”的详细信息,例如:

    quantity

    我不知道我是否必须使用hasMany或hasAndBelongsTo,并为'link table'创建另一个模型?

    任何人都可以在cakephp 2.x中向我解释这个美丽的sh **吗? ; - )

2 个答案:

答案 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表/模型中获取项目的名称