从数据库值填充Cakephp中的下拉列表

时间:2015-02-26 04:04:03

标签: database cakephp listbox

我试图在Cakephp v2.6.1的下拉列表中填充值。 正在检索这些值,但是表单助手没有按预期创建下拉列表框:我在表单上显示的所有内容都是“提交”按钮 - ID字段作为隐藏字段发送到网页。有人可以指出我出错的地方吗?

课程成员控制

<?php
App::uses('AppController', 'Controller');
class CoursemembershipsController extends AppController {
    public $components = array('Paginator', 'Session');
...
    public function add() {



        if ($this->request->is('post')) {
            $this->Coursemembership->create();
            if ($this->Coursemembership->save($this->request->data)) {
                $this->Session->setFlash(__('The coursemembership has been saved.'));
                if ($this->Coursemembership->saveAssociated($this->request->data)) {
                    return $this->redirect(array('action' => 'index'));
                    } else {
                    $this->Session->setFlash(__('The coursemembership could not be saved. Please, try again.'));
                    }
            }
        }
        $students = $this->Coursemembership->Student->find('list');
        $courses = $this->Coursemembership->Course->find('list');
        $this->set(compact('students', 'courses'));

    }

添加视图

<div class="coursememberships form">
<?php echo $this->Form->create('Coursemembership'); ?>

    <?php echo $this->Form->input('Student.id'); ?>
    <?php echo $this->Form->input('Course.id'); ?>

<?php echo $this->Form->end(__('Submit')); ?>
</div>

变量(来自调试加载项)

   View Variables
        students(array)
            1Cromwell
            2Lionheart
            3Knight
            7four
            8five
            9six
            10seven
            11eight
        courses(array)
            1Applied Speliology
            2Aggravated aggrandisement
            3Crossword Puzzles 101
            5Aggravated aggrandisement
            6Applied Speliology

1 个答案:

答案 0 :(得分:0)

您没有正确设置输入的字段名称。 id字段是按惯例的主键,将作为隐藏字段添加(通常用于编辑,因此您的模型知道要更改的ID)。

如果您遵循数据库设计惯例,则应添加在Coursemembership数据源中设置的字段(可能是名为coursememberships的数据库表)。这应该显示您需要的字段并保存正确的数据:

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

echo $this->Form->input('Coursemembership.student_id');
echo $this->Form->input('Coursemembership.course_id');

echo $this->Form->end(__('Submit'));

您要保存的所有内容都应转到Coursemembership模型。如果您确实想要在应用程序中添加新的学生或课程,则只需要向StudentCourse模型保存任何内容。要将学生的成员资格分配给课程,上述代码应该可以解决问题。