0

我有一个像这样的 CakePHP 控制器:

$this->loadModel('Project');

$list2 = $this->Project->find( 'list', array(
    'fields'     => array('Project.project'),
    'conditions'    => array('Project.user_id' => $userId)
));

$this->set($list2, 'list2');

$this->loadModel('Distance');

if(!empty($this->request->data)){    
    $this->Distance->create();
    if ($this->Distance->save($this->request->data)) {
        $this->Session->setFlash('Saved.');
        //  $this->redirect(array('action' => 'index'));
    } else {
        $this->Session->setFlash('FAILED');
    }
}else{
    //  $this->Session->setFlash('test');
}

和这样的视图:

echo $this->Form->input('Distance.project', array('options' => $list2, 'label' => false, 'empty' => '(choose one)'  ;

但是我将项目的 id 而不是项目名称插入到数据库中。我在使用这些字段时从来没有遇到过这样的问题 - 只是使用数据列表。

知道为什么会这样吗?

4

2 回答 2

1

这很正常......它的 $list2 和数组......以及选项的值是该数组的索引。

如果只想插入项目名称,则需要将 $list2 更改为 $list2['project_name']。您需要删除或替换 $list2 的索引。

LE:以iexiak为例。他还为您更改代码。

于 2013-02-25T17:35:33.937 回答
0
 $list2 = $this->Project->find( 'list', array(

                    'fields'     => array('Project.project'),
                     'conditions'    => array('Project.user_id' => $userId)
                 )

         );

这是因为 $list2 会自动创建一个 ID => project; 的列表。当您将其用作表单的输入时,它会自动创建下拉列表以反映这一点。这通常是最佳实践,链接到 ID 而不是描述,因为 ID 不会经常更改。下面应该可以得到你想要的东西:

 $list2 = $this->Project->find( 'list', array(

                    'fields'     => array('Project.project','Project.project'),
                     'conditions'    => array('Project.user_id' => $userId)
                 )

         );
于 2013-02-25T17:34:49.740 回答