簡體   English   中英

在 CakePHP 3 中包含連接后加入子查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM