2012-08-16 59 views
1

我有三種模式:公司,辦公室,CompanyPersonTask。公司模式有許多Office,並有許多CompanyPersonTask。爲什麼我的查找子句不起作用?

那麼,爲什麼這樣的代碼:

public function getCompaniesByRegion($region){ 
    $options['conditions'] = array("UPPER(Office.region) LIKE UPPER('".$region."%')"); 
    return $this->find('all', $options); 
} 

導致下面的錯誤?

「未知列 'Office.region' 在 'where子句'」

region存在於offices表。

+2

任何控制器,它可能是該表實際上是在所謂的'offices',就像你在你的最後一句寫道: ? – zb226 2012-08-16 20:19:45

+0

你需要加入辦公室嗎? – walrii 2012-08-16 20:24:45

+0

該表被稱爲辦公室,在複數形式,像任何其他數據庫表... 像指定的名稱約定。 – 2012-08-17 09:02:44

回答

1

如同您指定了CompanyOffice and CompanyPersonTask之間的正確關聯。即Company hasMany OfficeCompany hasMany CompanyPersonTask。 然後你可以把它寫成: 在你的公司模型裏寫: public $ actAs = array('Containable');

你的方法應該是:

class AppController extends Controller 
{ 
    public $uses = array('Company', 'Office', 'CompanyPersonTask'); 

    protected function _getCompaniesByRegion($region){ 
     return $this->Company->find('all', array('contain' => 
        array('Office' => array('conditions' => array("UPPER(Office.region) LIKE " => "UPPER('".$region."%')"))) 
               ) 
            ); 
    }   
} 

您可以調用此方法將使用$this->_getCompaniesByRegion($region_val);

+0

你打算把這個方法放在哪裏?我把它放在公司模型中。通過這種方式,這兩種解決方案不起作用,第一種獲得非對象通話,第二種解決方案給了我同樣的錯誤。我已經解決了使用第一個解決方案從鏈中刪除公司: return $ this-> Office-> find('all',$ options); – 2012-08-17 09:09:39

+0

一個相關的問題是:通過Office模型調用查找,我無法訪問CompanyPersonTask模型,因爲它與公司有關,而不是辦公室。 – 2012-08-17 09:33:49

+0

你能更清潔嗎?我應該在公司模型中擁有什麼以及AppController中的內容(以及爲什麼在appController中?)? – 2012-08-17 09:48:14