2015-11-03 89 views
0

我正在转换一个10岁的PHP应用程序。在我的老板聘请了一位PHP顾问后,他建立了一个CakePHP应用程序环境,我们正在学习。 (有趣,我知道)。另外,我来自JavaScript/Sharepoint背景,并没有很多的PHP经验。如何在CakePHP中创建查找

作为测试,我创建了一个基本地址表,其中包含这些字段:名字,姓氏,州,电话号码。我一直在使用正义联盟成员作为姓名和其他测试数据来填充我的表格。烘烤它就好了,默认引导页面正在工作。

我决定添加一个名为current status的下拉字段,现在为了简单起见,我想要选择:alive,dead.I在地址表中创建了列。

我创建了第二个称为状态的表,并使用状态ID作为foriegn键将状态列指向状态表的第一个表中。

烤了我的新桌子,重新弹了我的旧桌子。

状态下拉并不会让我选择死或活,如果我点击字段,我会得到一个向上或向下的箭头,并根据您点击哪一个箭头来增加或减少1.因此,第一次点击它会插入一个0.如果我上去或下去,它会增加或取消一个。

我不知道我在做什么错,我猜想有一些额外的代码我需要添加到MVC?

+0

你说你重新烤你的旧桌子。那包括控制器吗? –

回答

1

好吧,如果这个工作,那么很多工作:-)。现在到了以下内容:

public function getStatus() 
{ 
    $opt = $this->Status->find('list', array(...)); 
    return $opt; 
} 

然后在获得的列表中ADRESS控制器这样的:

$this->loadModel('Status'); 
$opt => $this->Status->getStatus(); 
$this->set('opt', $opt); 

现在你可以在状态模式这样的查询设置访问视图文件中的$ opt。 只要删除此行的观点:

$opts = array('0' => __('dead'), '1' => __('alive')); 

,它应该工作。

0

保持简单。广告到你的表这一行(只是为了理解它是如何工作的):'状态'为典型的“tinyint(1)”。然后设置这个在您的视图文件:

$opts = array('0' => __('dead'), '1' => __('alive')); 

当您创建inputfield,那样做:

echo $this->Form->input('Address.status', array('options' => $opts, 'label' 
=> __('Status'))); 

这应该工作。

+0

我很感激帮助。我已经建立了一个像你一样的例子。我的问题是,对于我正在移植的很多应用程序,当用户通过添加政府合同数据的应用程序移动时,选择/下拉内容将基于其他表格。事情是,我已经让它工作了,但它只是显示表格中四个项目的ID而不是名称。 – andthenwhathappened