我是CakePhp的新手。我的蛋糕中有一个用户控制器和一个记录控制器。用户控制器正在保存用户的详细信息,如用户名等.Record Controller正在保存用户的其他记录。 Records Controller有一个ctp文件。在此文件中,我有一个下拉列表,显示用户控制器中的所有用户名。用户从下拉列表中选择他的名字。还有一个名为checkin的按钮。现在,我希望在用户单击CheckIn按钮时根据用户选择将用户的Id保存在数据库中。这该怎么做 ?
这是我的记录控制器功能
function record()
{
$this->loadModel('User');
$rec = $this->User->find('list', array('fields'=> array('User.user_id','User.username')));
$this->set(compact('rec'));
$this->Record->saveField('in',date("H:i:s"));
}
}
?>
查看档案
<?php
echo $this->Form->input('Select User', array('type'=>'select','options' => $rec,'empty'=>false));
echo $form->end('CheckIn');?>
答案 0 :(得分:1)
你应该采取1 -------的建议,在你自己先行之前了解CakePHP的基础知识,这将阻止你在将来陷入困境。你的问题缺乏必要的细节,所以我将做出假设。
您需要做的就是在致电save()
时将用户ID传递给用户模型。如果您有一个select元素来选择用户名,我建议您这样做:
<select>
<option value="1">First user</option>
<option value="2">Second user</option>
</select>
其中选项的值是用户ID。然后,确保$this->request->data
数组正确表示数据字段:
Array
(
[User] => Array
(
[id] => 1 // From the select element on the form
[isername] => 'Updated username'
)
)
当你致电$this->User->save($this->request->data);
时,Cake会知道你正在更新记录,因为你已经传入了身份证。
答案 1 :(得分:1)
$rec = $this->User->find('list', array('fields'=> array('User.user_id','User.username')));
您不必为列表查询定义字段。如果模型具有显示标题集,则将使用该字段。
class User extends AppModel
{
//...
var $displayField = 'username';
}
// then in your controller
$this->set('users',$this->User->find('list'));
在视图中创建这些用户的下拉选择。您使用内置的select()
函数。
$this->Form->select('user_id',$users);
告诉表单助手输入填充表格中的哪个字段非常重要。当表单发布到控制器时,它将显示在$this->data
中(对于Cake 1.x)。标准约定(如果属于关联)将在user_id
模型中使用户的字段名称Record
。
function record()
{
if(!empty($this->data))
{
if(!$this->Record->save($this->data))
{
die("Failed to save...");
}
}
$this->loadModel('User');
$this->set('users',$this->User->find('list'));
}
答案 2 :(得分:0)
如果要保存用户ID,则
$rec = $this->User->find('list', array('fields'=> array('User.user_id','User.username')));
$this->set(compact('rec'));
在你看来
$this->Form->input('User.user_id',array('empty'=>'Select User', 'options'=>$rec));
您可以通过这种方式在表单操作中收集它
$this->data['User']['user_id']
希望这对你有用