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 => プロジェクトのリストを自動的に作成するためです。それをフォームの入力として使用すると、これを反映するドロップダウンが自動的に作成されます。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 に答える