2017-06-20 70 views
0

我試圖在CakePHP3中做一個左連接。 但我得到的是一個「不相關」 - 錯誤。Left加入CakePHP3

我有兩個表BORROWERS和IDENTITIES。 在SQL這就是我想要的:

SELECT 
identities.id 
FROM 
identities 
LEFT JOIN borrowers ON borrowers.id = identities.id 
WHERE 
borrowers.id IS NULL; 

我想這是我需要的:

$var = $identities->find()->select(['identities.id'])->leftJoinWith('Borrowers', 
     function ($q) { 
       return $q->where(['borrowers.id' => 'identities.id']); 
     }); 

但我發現了「身份不與借款人相關的」。

我也添加到了我的身份表:

$this->belongsTo('Borrowers', [ 
    'foreignKey' => 'id' 
]); 

還有什麼我需要什麼? Thanx!

+0

'$ identities'可能不是你認爲它是,例如,它是一個自動錶,那就是'\蛋糕實例\ ORM \ Table'代替的具體子類。檢查'get_class($ identity)'。 ** HTTPS://stackoverflow.com/a/43143901/1392379** – ndm

回答

0

是的。這是\ Cake \ ORM \ Table的一個實例,由於我沒有很好的選擇表名(身份/身份)。我想最好不要選擇那些障礙,因爲現在我將它重命名爲標籤/標籤。

這個查詢現在完美的作品:

$var = $identities 
    ->find('list') 
    ->select(['labels.id']) 
    ->from('labels') 
    ->leftJoinWith('Borrowers') 
    ->where(function ($q) { 
     return $q->isNull('borrowers.id'); 
}); 
0

外鍵不能只是'id',這不是一個正確的模型關聯。你需要把「borrower_id」字段中的身份,並且在身份模型聲明它是這樣的:

class Identities extends AppModel { 
    var $name = 'Identities'; 

public $belongsTo = array(
    'Borrower' => array (
      'className' => 'Borrower', 
      'foreignKey' => 'borrower_id' 
      ) 
    ); 

注意大小寫和單/複數通用命名約定,你的例子並不在效仿至少 - 忽略那些會讓你真的很難調試錯誤..