CakePHP:下拉列表(外键)

时间:2012-07-21 13:15:48

标签: cakephp controller foreign-keys

我正在尝试为类别创建下拉列表。如果这个检查没问题,那么它必须是数据库。

型号:

类别var $hasMany = 'Product';

产品var $belongsTo = 'Category';

ProductsController添加功能:

$this->loadModel('Category');
        $this->set('Categories',$this->Category->find('list',array('order'=> array('Category.name'))));
        $this->set(compact('Categories'));  

2 个答案:

答案 0 :(得分:5)

Nebojsac是正确的,因为您在视图中设置变量“$ Categories”两次。实际上,$this->set(compact('Categories'));实际上可能会用空值覆盖第一次调用set()。你应该使用:

$this->set('categories', $this->Category->find('list'));

OR:

$categories = $this->Category->find('list');
$this->set(compact('categories'));

当你使用compact时,它正在寻找一个名为$ categories的变量,然后它将该变量设置为$ categories,以便在视图中访问。

为了使用类别自动填充category_id或任何外键)字段,您应确保使用包含该表单的表单创建表单Product模型:

echo $this->Form->create('Product');

此外,表单输入应为:

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

如果您想手动指定下拉菜单的选项,可以再次使用$this->set('categories', $this->Category->find('list'));将类别传递给视图。

然后在您的视图文件中,将options数组键设置为$ categories:

echo $this->Form->input('category_id', array('type' => 'select', 'options' => $categories));

答案 1 :(得分:3)

我希望您有与belongsTO类别表关联的产品型号表。您想要将类别数据显示在我的下拉列表中。

$ Categories = $ this-> Product-> Category-> find('list');  $这 - >设置(紧凑( '分类'));

并在您的ctp页面中执行此操作

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