2014-01-31 64 views
0

我有兩個表的CakePHP和條件

officetypes與字段:ID [PK],名稱,

officenames與字段:ID [PK],名稱,officetype_id [FK]

2車型 Officename.php

class Officename extends AppModel { 

    public $name = 'Officename'; 
    public $belongsTo = array(
     'Officetype' => array(
      'className'  => 'Officetype', 
      'foreignkey'=>'id' 
     ) 
    ); 

Officetype.php

var $hasMany = array(
     'Officename' => array(
      'className'  => 'Officename'    

     ) 
    ); 

現在,我怎麼能寫在控制條件下加入論文兩個tables.My情況是這樣的:

SELECT a. * , b. * FROM officetypes AS a, officenames AS b  
    WHERE 
     a.id =3  
    AND 
     b.officeid = a.under 
+0

有一個在officenames表中沒有officeid場。此外,您沒有正確遵循cakephp命名約定:yoir表應該是office_types和office_names以及模型:OfficeName OfficeType – arilia

+1

爲什麼要在控制器中編寫SQL代碼?如果您要編寫SQL,爲什麼不把模型放在模型中(_fat模型,skinny controller_)?但是,爲什麼你不使用** find **函數?通過定義** hasmany **和** belongssto **關係,您已經建立了cakephp應該使用的關係。 – AgRizzo

回答

0

你只需要做到這一點:

$this->Officetype->find('all'); 
0

如果你這樣做:

$this->OfficeType->find('all') 

你將檢索你想要的數據。

無論如何,根據我的經驗,最好使用可控制行爲,特別是如果您想要擴展您的模型。使用Containable,您只能檢索您想要的模型。 所以做到這一點:

class OfficeType extends AppModel { 

public $actsAs = array('Containable'); 
public $hasMany = array(
    'OfficeName 
); 

,然後在你的控制器使用方法:

$this->OfficeType->find('all', array(
    'contain' => 'OfficeName', 
    'conditions' => array('id' => 3) 
    )