2012-12-08 40 views
0

我想通过使用当前表中的字段和相关表中的字段来加入具有组合键(SOLineNumber)的表。我试图使用ActiveRecord模型关系和连接条件。加入Yii模型关系

我有以下结构:

PickTicket 
    PickTicketNumber 
    SONumber 

PickTicketLine 
    PickTicketNumber 
    SOLineNumber 

SONumber 
    SONumber 

SOLineNumber 
    SONumber SOLineNumber 

我想从pickticketline去SOLineNumber。

这里是我试过到目前为止: PickTicketLine型号的关系:

return array(
'PickTicket' => array(self::BELONGS_TO, 'TblwhPickTicket', 'PickTicketNumber'), 
'SOLine' => array(self::BELONGS_TO, 'TblsoSOLine', 'PickTicket.SONumber, SOLineNumber', 'join'=>'PickTicket'), 
) 

但它引发我一个错误说没有定义PickTicketLine.PickTicket.SONumber。

编辑:如果我写了一个常规查询要做到这一点,我会做到以下几点:

SELECT sol.* 
FROM TblwhPickTicketLine ptl 
JOIN TblwhPickTicket pt ON (pt.PickTicketNumber = ptl.PickTicketNumber) 
JOIN TblsoSOLine sol ON (pt.SONumber = sol.SONumber AND ptl.LineRef = sol.SOLineNumber) 
WHERE ptl.PickTicketNumber = '12345' 
AND ptl.PickTicketLineNumber = '1' 

回答

0

试试下面的关系。

return array(
    'PickTicket' => array(self::BELONGS_TO, 'TblwhPickTicket', 'PickTicketNumber'), 
    'SOLine' => array(self::MANY_MANY, 'TblsoSOLine', 'PickTicket(SONumber, SOLineNumber)'), 
); 

发送表结构和查询,如果上述关系不起作用。因为您可能还需要 来定义PickTicket模型中的主键。以下方式

public function primaryKey() 
    { 
    return array('SONumber','PickTicketNumber'); 
    } 
+0

恐怕没有工作。难点在于SOLineNumber存储在PickTicketLine表中,但SONumber存储在PickTicket表中。我已经包含了primaryKey函数(今天花了我几个小时才弄清楚),感谢您将它包括在内以获得完整性。我不希望任何人花费这么多时间来试图找出一个简单的连接。 –

+0

我写了实际的sql查询,我希望这个运行。希望有所帮助! :) –