2015-11-13 38 views
0

當獲取單個記錄和相關記錄(下兩級)時,有什麼方法可以將條件傳遞給CakePHP 3中包含的記錄?在這種情況下,例如:如何在get()調用中將條件傳遞給「包含」?

$user = $this->Users->get($this->Auth->user('id'), [ 
    'contain' => [ 
     'Articles' => ['Comments'] 
    ] 
]); 

如果嘗試了一堆有回調的方式,但似乎只在第一個層次上工作。像這樣,例如:

$user = $this->Users->get($this->Auth->user('id'), [ 
    'contain' => [ 
     'Articles' => function ($q) { 
      return $q->where(['Articles.published' => true]); 
     } 
    ] 
]); 

有什麼想法?

回答

2

,你應該能夠做到:

$user = $this->Users->get($this->Auth->user('id'), [ 
    'contain' => [ 
     'Articles' => function ($q) { 
      return $q->where(['Articles.published' => true]); 
     }, 
     'Articles.Comments' => function ($q) { 
      return $q->where(['Comments.deleted' => false]); 
     } 
    ] 
]); 

$user = $this->Users->get($this->Auth->user('id'), [ 
    'contain' => [ 
     'Articles' => function ($q) { 
      $q->contain([ 
       'Comments' => function ($q) { 
        return $q->where(['Comments.deleted' => false]); 
       } 
      ]); 
      return $q->where(['Articles.published' => true]); 
     }    
    ] 
]); 
+0

謝謝,arilia! –

0

@ arilia的選項應該可以正常工作。我的選擇是

$user = $this->Users->get($this->Auth->user('id'), [ 
    'contain' => [ 
     'Articles' => [ 
      'queryBuilder' => function ($q) { 
       return $q->where(['Articles.published' => true]); 
      }, 
      'Comments' => [ 
       'querybuilder' => function ($q) { 
        return $q->where(['Comments.deleted' => false]); 
       } 
      ], 
     ], 
    ], 
]); 

(試過張貼此作爲一個評論,而不是一個單獨的答案,但它不會格式化代碼正確那裏。)

+0

感謝您分享Greg! –

相關問題