2012-12-17 34 views
0

如何在CakePHP中執行連接,例如下面的MySQL連接?如何在CakePHP中執行連接?

SELECT * 
FROM yarns y 
JOIN yarn_brands yb 
JOIN contents ct 
WHERE y.id = ct.yarn_id 
AND yb.id = y.yarn_brand_id 
AND ct.material_id = 2 

我試圖搜索周圍的答案,但我沒有找到任何工作。 我發現了一些關於「遏制」,我已經試過,但我得到的查詢它產生doesent結果包括一個連接表的要求加入。

$this->Message->find('all', array(
    'contain' => array('User') 
    'conditions' => array(
     'Message.to' => 4 
    ), 
    'order' => 'Message.datetime DESC' 
)); 

回答

0

這是加入我結束了:

  $options['contain'] = ''; 
      $options['joins'][0]['table'] = 'contents'; 
      $options['joins'][0]['alias'] = 'cont'; 
      $options['joins'][0]['conditions'] = 'Yarn.id = cont.yarn_id'; 
      $options['joins'][1]['table'] = 'yarn_brands'; 
      $options['joins'][1]['alias'] = 'yb'; 
      $options['joins'][1]['conditions'] = 'yb.id = Yarn.yarn_brand_id'; 
      $options['fields'] = array('Yarn.name'); 
      $options['conditions']['cont.material_id'] = $this->request->data['Yarn']['material_id']; 
      $options['conditions']['Yarn.yarn_brand_id'] = $this->request->data['Yarn']['yarn_brand_id']; 
1

的CakePHP使這一切很簡單,只要您已經閱讀了關於模型關係的書,並相應地設置了您的模型和數據庫表。這是CakePHP的一個非常重要的部分,什麼會構成很多你的應用程序。如果你懂得如何做到這一點,那麼它會讓你的生活變得更輕鬆。

http://book.cakephp.org/2.0/en/getting-started/cakephp-conventions.html#model-and-database-conventions

http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html

對於你的MySQL例如,試試這個代碼。顯然,我不確切知道你的模型關係是什麼,但這裏是基於MySQL的猜測。

// app/Model/Yarn.php 
class Yarn extends AppModel { 

    public $belongsTo = array('YarnBrand'); 

    // You might need this as $hasOne instead, I can't tell from the MySQL alone. 
    public $hasMany = array('Content'); 

} 

// app/Model/YarnBrand.php 
class YarnBrand extends AppModel { 

    public $hasMany = array('Yarn'); 

} 

// app/Model/Content.php 
class Content extends AppModel { 

    public $belongsTo = array('Yarn'); 

} 

代碼找到的所有紗線,用自己YarnBrand沿和內容

$this->Yarns->find('all', array(
    'conditions' => array(
     Content.material_id' => 2 
    ), 
    'contain' => array(
     'YarnBrand', 
     'Content' 
    ) 
)); 
+0

相信模型還必須有'Containable'行爲附加爲此工作... – Hoff

+0

謝謝你的答案!模型和它的「關係」正是我所擁有的,我用蛋糕來烘焙我的模型,視圖和控制器,除了這個連接外,它們都可以正常工作。當我嘗試查找()我得到一個錯誤:「SQLSTATE [42S22]:列未找到:1054未知列'內容。'材料'在'where子句'」。我無法發佈由於缺乏評論空間而產生的整個sql安裝程序。如果我刪除「條件」部分,但我得到一個結果。 – Sultanen

+0

@Hoff:我已經將Containable附加到模型上:public $ actsAs = array('Containable'); – Sultanen