从cakephp中的一个模型中加入两个/三个表

时间:2013-08-20 16:14:22

标签: cakephp join cakephp-2.0

我的模型如图(http://hosting5578581.az.pl/img/association.png)所示,我可以弄清楚如何获取数据(在ORDER模型中),如图所示,我可以从OrderItems项目获取与某些顺序有关但我不知道如何在mysql查询中将其显示为NAME(在Items表中)我可以通过(例如order_id = 1)来执行此操作:

  

select items.name from order_items, items WHERE order_items.item_id = items.item_id AND order_items.order_id = 1;

3 个答案:

答案 0 :(得分:2)

您需要使用CakePHP's Containable Behavior

它有很好的文档记录(点击上面的链接)并允许您提取所需的任何相关数据。

注意:您几乎应该只使用CakePHP's find()而不是自己的自定义MySQL查询。

最终看起来像这样:

$this->Order->find('first', array(
    'conditions' => array(
        'id' => $orderId
    ),
    'contain' => array(
        'Customer',
        'OrderItem' => array(
            'Item'
        )
    )
));

答案 1 :(得分:0)

如果我理解你的问题,你需要一些方法:

$this->recursive = 2;   
$this->read(null, $id);

其中id是订单编号

答案 2 :(得分:0)

@戴夫: 在我的OrdersController中我有代码:

$products = $this->Order->find('first', array(

            'contain' => array (
                'Customer',
                'OrderItem' => array(
                    'Item'
                )
            )
                 ));
在find()查询之后

我得到了这个结果 (我省略了数组'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表/模型中获取项目的名称