我是cakephp的新手。 我有一个“用户”表和一个“类别”表
用户所属的类别(字段:users.id,users.name,users.category) category hasMany users(fields:category.id,category.name,users.category)
我正在解决这样的关联数据。
in(users)edit.ctp我把
// view/Users/edit.ctp
echo $this->Form->input('name');
echo $this->Form->input('categories', array( 'value' => $this->Form->value('User.category'),
'name'=>'data[User][category]') );
</pre>
in users controller I have
<pre>
public function edit($id = null) {
$this->User->id = $id;
if (!$this->User->exists()) {
throw new NotFoundException(__('Invalid user'));
}
if ($this->request->is('post') || $this->request->is('put')) {
if ($this->User->save($this->request->data)) {
$this->Session->setFlash(__('The user has been saved'));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The user could not be saved. Please, try again.'));
}
} else {
$this->request->data = $this->User->read(null, $id);
}
$sexes = $this->User->Sex->find('list');
$categories = $this->User->Category->find('list');
$this->set(compact('categories'));
}
一切正常,但我怀疑有一种更简单的方式来做这种形式。
这真的需要吗?
,array('value'=&gt; $ this-&gt; Form-&gt; value('User.category'),'name'=&gt;'data [User] [category]')
如果没有theese params,则选择框不会突出显示所选选项,也不会保存任何内容。
可能像
echo $this->Form->input('Category.name');
例如?但是这样的代码没有显示选择框 它不会保存users.category字段。
我无法找到任何有关此示例的教程或代码。 链接将不胜感激。
答案 0 :(得分:0)
尝试使用Cake的数据库表和字段的命名约定。如果按照惯例,Cake会为你做很多繁重的工作:
用户表:
users.id, users.name, users.category_id
类别表
categories.id, categories.name
用户模型
class User extends AppModel {
public $belongsTo = array(
'Category'
);
}
类别模型
class Category extends AppModel {
public $hasMany = array(
'User'
);
}
用户控制器:
class UsersController extends AppController {
public function edit($id) {
if (!empty($this->request->data) {
// form submitted - try to save
if ($this->User->save($this->request->data)) {
$this->Session->setFlash('User updated');
}
else {
$this->Session->setFlash('Please correct the errors');
}
}
else {
// prepopulate the form
$this->request->data = $this->User->findById($id);
}
// populate the categories dropdown
$this->set('categories', $this->User->Category->find('list');
}
}
/app/views/Users/edit.ctp
<?php
echo $this->Form->create();
echo $this->Form->inputs();
echo $this->Form->end('Update');