2011-08-03 26 views

回答

10

我會建議使用ArraySource由社區維護的CakePHP Datasources plugin

下載整個插件並將內容提取到app/plugins/datasources

定義在app/config/database.php到數據源的連接:

public $array = array('datasource' => 'Datasources.array'); 

這應該允許您通過在模型中定義的記錄來模擬表:

class Country extends AppModel { 

    public $useDbConfig = 'array'; 

    public $records = array(
     array('id' => 1, 'name' => 'Test record') 
    ); 

} 
+0

你知道這些數據源的doc在哪裏嗎?謝謝 –

+0

除了版本庫的[自述文件](https://github.com/cakephp/datasources#readme)之外,唯一的其他文檔是在一些數據源的docblock中([amazon](https://github.com) /cakephp/datasources/blob/c8da44d638c9fa5c9baada7ead7f366bdb1d03e1/models/datasources/amazon_associates_source.php#L22)|[csv](https://github.com/cakephp/datasources/blob/c8da44d638c9fa5c9baada7ead7f366bdb1d03e1/models/datasources/csv_source.php#L22) )。要查找每個數據源的配置選項,請查找「_baseConfig」或「config」的實例。代碼中的更多文檔將是一個明顯的改進。 – deizel

+0

definitly一個不錯的方法。還不知道那個。將檢查出來。我曾經這樣做直到現在:http://www.dereuromark.de/2010/06/24/static-enums-or-semihardcoded-attributes/ – mark

1

作爲替代方案,如果沒有其他數據除此之外,基本上,這個國家是一個什麼樣的國家,你可以把它保持在同一個模型中,而不需要關聯。

class MyModel extends AppModel { 

    public static $countries = array(
     'Africa', 'America', ..., 'Zululand' 
    ); 

    public $validate = array(
     'country' => array(
      'rule' => array('inList', self::$countries), 
      ... 
     ) 
    ) 

} 
+2

我從來沒有去過這個國家的'非洲';) – tsukimi

15

可以完全以使用沒有表的語法:沿東西線

class ModelWithoutTable extends AppModel 
{ 
    var $useTable = false; 
} 

有這個國家型號無表,但你需要模擬一個數據源(如XML,YAML, PHP數組等)的國家數據。

希望這會有所幫助。

+0

謝謝..像魅力一樣工作。 :) –