CakePHP:下拉列表(外键)

Web*_*Owl 4 controller cakephp 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'));  
Run Code Online (Sandbox Code Playgroud)

pen*_*egg 5

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

$this->set('categories', $this->Category->find('list'));
Run Code Online (Sandbox Code Playgroud)

要么:

$categories = $this->Category->find('list');
$this->set(compact('categories'));
Run Code Online (Sandbox Code Playgroud)

当您使用compact时,它正在查找名为$ categories的变量,然后将该变量设置为$ categories,以便在视图中访问.

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

echo $this->Form->create('Product');
Run Code Online (Sandbox Code Playgroud)

此外,表单输入应为:

echo $this->Form->input('category_id');
Run Code Online (Sandbox Code Playgroud)

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

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

echo $this->Form->input('category_id', array('type' => 'select', 'options' => $categories));
Run Code Online (Sandbox Code Playgroud)