[英]Join sub-query after contain joins in CakePHP 3
我目前在 CakePHP 3 中遇到問題 - 我正在嘗試將子查詢加入現有查詢,但是 ORM 在處理“包含”方法之前添加子查詢,但子查詢連接依賴於一些包含的表。 有什么方法可以強制連接在包含后運行?
我的代碼相當長且令人費解,但我將編寫一個簡單的示例:
$articles = $this->find()
->select(['Articles.id', 'Articles.title', 'Users.id'])
->contain(['Users','Tags']);
$subQuery = $this->find()
->select(['text' => 'Articles.body', 'user_id' => 'Users.id', 'article_id' => 'Articles.id'])
->contain(['Users','Tags']);
$articles
->join([
'ArticleText' => [
'table' => $subQuery,
'type' => 'LEFT',
'conditions' => ['ArticleText.user_id = Users.id', 'ArticleText.article_id = Articles.id']
]);
現在這段代碼過於簡單,顯然沒有必要,但問題本質上是 ORM 將生成一個嘗試首先執行連接的查詢,連接將失敗,因為尚未連接 Users.id。 有沒有辦法讓包含先運行?
AFAIK 訂單不能(還)受到影響,包含和匹配(這也是*JoinWith()
方法)將在手動加入后出現,另請參見https://github.com/cakephp/cakephp/issues/10746 。
因此,您可能也必須手動加入Users
關聯,而不是使用contain()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.