2011-08-06 47 views
1

数据完整性的原因,我尝试在我的用户填入一个超简单的下拉菜单“国家” /注册CakePHP的:ID饥饿驱使我坚果

随着国家和用户没有关系(请不要对此有何评论有原因吧蛋糕的工作方式,如果国家是一个FK),检索到的国家在我users_controller如下两种方法都不能防止蛋糕从仅保存COUNTRY_ID:

$this->set('countries', ClassRegistry::init('Country')->find('list')); 

$this->set('countries', ClassRegistry::init('Country')->find('list', array('fields' => array('Country.country')))); 

的DisplayField设置为:国家。

echo $this->Form->input('country'); 

各国在下拉列表中显示出很好:

在我register.ctp,作为输入设置。但无论我尝试,只有国家ID被保存到用户表中。我删除了表格中的ID,并将国家作为我的PK。 Cake开始谈论'缺少列'Country.id。

如何解决这个简单的事情,或者我必须切换回简单的普通无框架PHP,这需要我30秒来解决。

谢谢!

+2

蛋糕是约定配置,也许它不适合你 – Dunhamzzz

回答

1

如果我理解正确,那么国家的值和显示的名称应该是相同的。 Cake的find('list')方法默认为id => name列表,您可以使用fields参数(您需要提供两个字段)进行自定义。我不知道如果你两次提供同一个领域,这是否会奏效,你可能想尝试一下。

如果automagic find('list')方法的约定不适合您的用例,那么您可以通过无限种方式自行创建列表。最简单的,使用find('list'),然后就在值复制到钥匙:

$countries = $this->Country->find('list'); 
$countries = array_combine($countries, $countries); 

如果你没有id场在country表所有,只是使用普通的find('all')并建立自己的阵列:

$countries = $this->Country->find('all'); 
$countries = array_map(function ($country) { return $country['Country']['name']; }, $countries); 
$countries = array_combine($countries, $countries); 

最后但并非最不重要的一点是,您可以放弃Cake Form助手,该助手需要一个value => name数组作为其选项,并以原始PHP输出您自己的国家/地区列表。

蛋糕的惯例是有安全时间的典型模式。如果你的模式不典型,CakePHP中仍然有PHP。

1

只是使用这个:$this->set('countries', ClassRegistry::init('Country')->find('list', array('fields' => array('Country.country','Country.country'))));