0

在任何阅读谷歌等的建议之前,我必须写下我阅读了很多文章和博客,现在我不知道如何在我的情况下使用 HABTM... ;]

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

  1. 订单(order_id、customer_id、paymenyOption 等...)
  2. 项目(item_id、大小、颜色等...)
  3. 客户(customer_id、姓名、电话等...)

现在我有 ORDERS<->CUSTOMERS 之间的关系(工作正常),但我需要有“链接表”,其中将是order_id, product_id, quantity.

要清楚,

  • 一个订单可以有很多项目

  • 一件商品可以有多个订单

  • 一个客户可以有多个订单(但一个订单可以有一个客户)

    (正常秩序系统哲学)

在订单视图中,我必须有“项目”、“客户”和“订单”的详细信息,例如:

Name: Johny Deep (from CUSTOMERS model)
Date ordered: 13-08-2013 (from ORDERS model)
Products: 2x apple, 2x watermelon (from ITEMS model)

我不知道我是否必须使用 hasMany 或 hasAndBelongsTo,并为“链接表”制作另一个模型?

谁能在 cakephp 2.x 中向我解释这个美丽的 sh** 吗?;-)

4

2 回答 2

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.如你所见

'项目' => 数组()

为空;-) 所以我无法从项目表/模型中获取项目的名称

于 2013-08-29T10:41:37.733 回答
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'
        )
    )
));

同样,很容易提取客户的所有订单、特定项目的所有订单、客户下订单的总次数、订购项目的总次数以及客户订购的总次数特定项目等

于 2013-08-21T18:31:39.627 回答