2014-02-20 29 views
0

我有一个问题,将我的SQL查询转换为推动查询。PROPEL - 传输SQL查询以推动

查询样子(我已经问这个查询之前:Changing a sql query using join instead of a subselect

SELECT cr.* 
FROM confirmation_requests cr 
LEFT JOIN confirmations c ON (cr.id = c.confirmation_request_id AND c.device_id = 1) 
WHERE c.id IS NULL; 

所以我试图转移这个查询来推动,它看起来像以下:

$confirmationRequests = ConfirmationRequestQuery::create() 
        ->leftJoin("Confirmation c") 
         ->addJoinCondition("c","c.device_id = ?",$device->getId()) 
        ->where("c.id IS NULL") 
        ->find(); 

但它不起作用。

从这个行走查询的SQL查询:

SELECT confirmation_requests.id, 
    confirmation_requests.customer_id, 
    confirmation_requests.confirmation_type_id, 
    confirmation_requests.file_path, 
    confirmation_requests.user_id, 
    confirmation_requests.state, 
    confirmation_requests.created_at, 
    confirmation_requests.updated_at 
FROM `confirmation_requests` 
CROSS JOIN `confirmations` LEFT JOIN `confirmations` `c` ON (confirmation_requests.id=c.confirmation_request_id AND confirmations.user_id = 10) 
WHERE confirmations.id IS NULL 

感谢您的任何想法:-)

回答

0

行走喜欢在架构文件中定义的表的关系,所以,开始你的架构文件并创建一个外键关系(加取决于数据存在关系的类型选项):

<table name='confirmation_request' ... 
    <column name='id' .... 
    ... 
</table> 

<table name='confirmation' ... 
    ... 
    <column name='cr_id' ... 
    <foreign-key foreignTable='confirmation_request' ... 
    <reference local='cr_id' foreign='id' ... 
    </foreign-key> 
    ... 
</table> 

然后你就可以编写查询,如:

$crs = ConfirmationRequestQuery::create() 
     ->join('ConfirmationRequest.Confirmation') 
     ->where('Confirmation.UserId = 10') // Add other conditions as required 
     ->where('Confirmation.DeviceId = ?', $define->getId()) 
     ->where('Confirmation.Id IS NULL') 
     ->find();