2014-02-07 109 views
0

我有属于关联关系:CakePHP的2.X:加入在我的模型“MESN”属于关联

public $belongsTo = array(
     'Order' => array(
      'className' => 'Order', 'foreignKey' => 'order_id', 'conditions' => '', 'fields' => '', 'order' => '' 
     ), 'SaleOrder' => array(
      'className' => 'SaleOrder', 'foreignKey' => 'sale_order_id', 'conditions' => '', 'fields' => '', 
      'order' => '' 
     ), 'ShippedBox' => array(
      'className' => 'Box', 'foreignKey' => 'shipped_box_id', 'conditions' => '', 'fields' => '', 
      'order' => '' 
     ) 
    ); /*  * * hasMany associations** @var array 

在我的模型的功能之一,我想加入另一个表的“属于关联”,“ShippedBox” (表格:框)。不过不要紧,我如何努力写我一起获得未知列的错误消息:

$arr_s_result = $this->find('all', array(
    'joins' => array(
    array('table' => 'shipments', 
     'alias' => 'MyShipments', 
     'type' => 'INNER', 
     'conditions' => array(
     'MyShipments.id = ShippedBox.shipment_id' 
    ) 
)), 
    'conditions' => array('Mesn.name' => $arr_search), 'recursive' => 0 
)); 

我曾尝试:

'MyShipments.id = ShippedBox.shipment_id' 

'MyShipments.id = box.shipment_id' 

甚至

'MyShipments.id = Boxes.shipment_id' 

其中表 “盒子” W ith字段“shipment_id”存在。

我怎样才能得到这个工作的加盟?

回答

0
'MyShipments.id = box.shipment_id' 

到:

'MyShipments.id = Box.shipment_id' 

而且你看这个:

$arr_s_result = $this->find('all', array(
           'conditions' => array('Mesn.name' => $arr_search), 'recursive' => 0 

));

的属于关联连接是自动完成的。

+0

相同:‘对条款’“未知列‘Box.shipment_id’在.... –

+0

也许你不需要做加盟?由于属于关联是自动完成的? – trafalgar

+0

我从被执行的SQL语句看到的问题是,它增加了在所有连接都在那里箱子是不是“知道”,但一开始就加入。 –

0

我认为你需要做的是这样使用子查询得到你想要的东西 -

$arr_s_result = $this->find('all', array(
    'joins' => array(
      array('table' => '(SELECT boxes.id, [enter other fields you need here] FROM shipments JOIN boxes ON boxes.shipment_id = shipments .id)', 
      'alias' => 'MyShipments', 
      'type' => 'INNER', 
      'conditions' => array(
     'Mens.shipped_box_id = MyShipments.id' 
     ) 
    )), 
    'conditions' => array('Mesn.name' => $arr_search), 'recursive' => 0 
)); 
+0

看起来像一个很好的解决方案。将测试当明天回来工作,并给予进一步的评论或接受 –