在hasMany关联中编辑项目(CakePHP)

时间:2014-11-14 20:48:08

标签: php mysql cakephp

我在Mysql中有两个表:

1-项

列:id,name,price,category_id,created

2-分类

列:id,name,created

类别有很多项目和项目属于类别:

Class Item extends AppModel {
  public $belongsTo = 'Category';
}

lass Category extends AppModel {
   public $hasMany  = 'Item';
}

我想编辑一个给定的项目,因此我想显示可能的类别名称来选择一个。

查看/项目/ edit.ctp

<h1>Edit Post</h1>
<?php
    echo $this->Form->create('Item');
    echo $this->Form->input('name');
    echo $this->Form->input('price');
    echo $this->Form->input('category_id');
    echo $this->Form->input('created');
    echo $this->Form->input('id', array('type' => 'hidden'));
    echo $this->Form->end('Save Post');
?>

控制器/ ItemsController.php

public function edit($id = null){
        if (!$id) {
            throw new NotFoundException(__('Invalid Item'));
        }
        $item = $this->Item->findById($id);

        if (!$item) {
            throw new NotFoundException(__('Invalid Item'));
        }

        if (!$this->request->data) {
            $this->request->data = $item;
        }

        if ($this->request->is(array('post', 'put'))) {
            $this->Item->id = $id;
            if ($this->Item->save($this->request->data)) {
                $this->Session->setFlash(__('Your item has been updated.'));
                return $this->redirect(array('action' => 'index'));
            }
            $this->Session->setFlash(__('Unable to update your item.'));
        }
    }

问题在于:在表格中的category_id中,我甚至看不到任何类别ID编号。

2 个答案:

答案 0 :(得分:0)

来自文档here

假设User hasAndBelongsToMany Group。在您的控制器中,使用选择选项设置camelCase复数变量(在这种情况下为group - &gt; groups,或ExtraFunkyModel - &gt; extraFunkyModels)。在控制器操作中,您将添加以下内容:

$this->set('groups', $this->User->Group->find('list'));

在视图中,可以使用以下简单代码创建多重选择:

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

如果要在使用belongsTo - 或hasOne - Relation时创建选择字段,可以将以下内容添加到Users-controller(假设您的用户所属的组):

$this->set('groups', $this->User->Group->find('list'));

然后,将以下内容添加到表单视图中:

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

答案 1 :(得分:0)

您需要在控制器中设置$categories变量;

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