2016-03-01 50 views
0

我有下面的命令,讓我從輸入我的數據庫相關聯的hasMany條目:CakePHP的發現()條件條目

$teasers = $this->Teaser->find('all', array(
    'conditions' => array(
     'Teaser.published' => 1 
    ), 
)); 

現在也posts作品將於牽強,因爲在hasMany關係。

輸出看起來是這樣的:

array(
    0 => array(
     'Teaser' => array(
      'id' => '1', 
      'user_id' => '63', 
      'token' => '56d455bc20cfb56d455bc20d08', 
      // this goes on 
     ), 
     'Post' => array(
      0 => array(
       'id' => '1', 
       'teaser_id' => '1', 
       'title' => 'blabla', 
       'text' => 'blabla', 
       'published' => 1, 
       // this goes on 
      ) 
     ) 
    ) 
) 

現在的問題是,我怎麼能包括在conditions東西,也給篩選Post -entries?

當我進入像這樣,我得到一個錯誤:

$teasers = $this->Teaser->find('all', array(
    'conditions' => array(
     'Teaser.published' => 1, 
     'Post.published' => 1 
    ) 
)); 
+0

你得到了什麼錯誤? –

回答

1

你得到一個錯誤的原因是,你們的關係是一個hasMany所以當蛋糕做的contain它實際上是做了多個查詢您find。因此,您無法在條件中指定'Post.published' => 1,因爲Post別名在主要查詢(檢索您的查詢者)中不存在。

相反,你需要通過額外的條件作爲的包含部分: -

$teasers = $this->Teaser->find('all', [ 
    'contain' => [ 
     'Post' => [ 
      'conditions' => [ 
       'Post.published' => 1 
      ] 
     ] 
    ], 
    'conditions' => [ 
     'Teaser.published' => 1, 
    ] 
]); 

這將讓蛋糕知道你想要建立的職位查詢時使用的條件。

+1

謝謝,這工作正常 –

0

您可以在模型Teaser.php寫條件像

public $hasMany = array(
    'Post' => array(
     'className' => 'Post', 
     'conditions' => array('Post.published' => 1) 
    ) 
); 
1

你應該閱讀文檔containableretrieving data。這些都是基礎知識。

$teasers = $this->Teaser->find('all', array(
    'contain' => [ 
     'Post' => [ 
      'conditions' => [ 
       'published' => 1 
      ] 
     ] 
    ], 
    'conditions' => array(
     'Teaser.published' => 1, 
    ) 
));