如何在 CakePHP 中创建查找

How to create a lookup in CakePHP

我正在转换一个已有 10 年历史的 PHP 应用程序。我老板聘请了一位php顾问后,搭建了一个CakePHP应用环境,我们边学边学。 (有趣,我知道)。另外,我来自 javascript/sharepoint 背景,并没有很多 php 经验。

作为测试,我创建了一个包含以下字段的基本地址 table:名字、姓氏、州、电话号码。我一直在使用正义联盟成员作为姓名和其他测试数据来填充我的 table。烘烤得很好,默认 bootstrap 页面正常工作。

我决定要添加一个名为当前状态的下拉字段,现在为了简单起见,我想要选择:活着,dead.I 在我的地址 table 中创建了该列。

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

烤了我的新 table 并重新烤了我的旧的。

状态下拉菜单没有给我选择是死还是活,如果我点击该字段,我会得到一个向上或向下的箭头,根据你点击的是哪个,它会增加或减少 1。所以我第一次点击它会插入一个 0。如果我向上或向下,它会增加或减少一个。

我不确定我做错了什么,我猜我需要向 MVC 添加一些额外的代码?

保持简单。广告到您的 table 这一行(只是为了了解它是如何工作的):'status' as typ "tinyint(1)"。然后在您的视图文件中设置:

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

创建输入字段时,请按以下方式操作:

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

这应该有效。

好的,如果这行得通,那么很多都在工作:-)。现在进行以下操作:在 Status Model 中设置这样的查询:

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

然后像这样将列表传送到 地址控制器

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

现在您可以访问视图文件中的 $opt 了。 只需删除视图中的这一行:

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

它应该可以工作。