2011-09-26 60 views
1

有沒有辦法從CakePHP中的特定表中選擇所有字段? 因此,像:CakePHP Select Query

$this->Model1->find('first', 
        array('fields' => 'Model2.*', 
          'conditions' => 'Model1.id = Model2.Model1_id'), 
          'contain' => array()); 

我一直在尋找所有的地方,不能找到這樣的東西。 我是一種希望,我不必鍵入所有字段爲模型2 :(

原諒我nubishness,我剛開始學習蛋糕,許多在此先感謝!

+0

我不知道答案,但你也可以做到這 - $> Model1-> Model2->找到(「第一」 ......在這種特殊情況。 – Henri

+0

只是爲了確保,Model1-> Model2意味着Model2有一個映射到Model1的外鍵,對嗎? –

+0

你做得對,但你應該使用的是cakephp關聯(hasMany,belongsTo,HABTM),那麼你只需要執行'$ this-> Model1- > find('first',array('fields'=>'Model2。*')'如果不是,你將不得不做一個連接,強烈建議你這樣做第一種方法:D – api55

回答

1

你不,語法你(指Model2.*部分)將工作,如將定義都沒有字段默認情況下,他們都回來了。

我不知道,不過,是否find通話因爲你有它會工作。最好是執行Model1查找尷尬,以便從Model2獲得數據。正如亨利在他的評論中提到的,更好在Model2上做尋找。

+0

是的,但我會如果我能。我現在正在使用的(別人的代碼)雖然有一個表,但似乎沒有Model2的模型。 –

+1

不夠公平。但值得注意的是,Cake會生成一個模式如果它不存在並被引用,則爲你(隱式地)。如果該表遵循命名慣例,那麼它應該沒問題。 –

+0

真的很高興知道,謝謝! –

0

你可以試試這個

$this->Model1->find('first', 
array(
    'fields'=>'Model2.*', 

    'joins' => array(
     array(
     'table'=>'table', 
     'alias'=>'Model2', 
     //'type'=>'LEFT', 
     'conditions'=>array(
      "Model2.model1_id = Model1.id",   
     ), 
    ), 
), 

    'conditions' => array('Model1.somefields' =>'1' 
) 

) );

1

對於某些驅動程序,通配符將無法按預期工作。所以你需要整個字段列表。

$ds = $this->Model1->getDataSource(); 

$this->Model1->find('first', array(
    'fields' => $ds->fields($this->Model1), 
    'conditions' => 'Model1.id = Model2.Model1_id', 
    'contain' => array() 
));