在cakephp中选择列表关联

时间:2012-11-08 13:54:39

标签: cakephp associations selectlist

我是新蛋糕并使用版本2.

我有模特

hgcylinder.php

class HgCylinder extends AppModel  {
    //put your code here
    var $name= "HgCylinder";

    var $belongsTo = array('HgKeyGase');
}

hgkeygase.php
class HgKeyGase extends AppModel  {
    //put your code here
    var $name= "HgKeyGase";


    public $belongsTo = array(
        'HgKeyColor' => array(
            'className' => 'HgKeyColor',
            'foreignKey' => 'hg_key_color_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
        );

}

Controller HgCylindersController.php

<?php

class HgCylindersController extends AppController
{
    var $name = "HgCylinders";
    // var $scaffold;
    function index()
    {
        $this->set('hey',$this->HgCylinder->find('all'));
    }


    public function edit($id = null) {
        $this->HgCylinder->id = $id;
        if ($this->request->is('post')) {
        var_dump($this->request->data);
        exit;
            if ($this->HgCylinder->save($this->request->data)) {
                $this->Session->setFlash(__('Cylinder has been updated successfull'));
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('The cylinder could not be saved. Please, try again.'));
            }
        } else {
            $this->request->data = $this->HgCylinder->read(null, $id);
        }
        $hg_key_gase_id = $this->HgCylinder->HgKeyGase->find('list');

        $this->set(compact('hg_key_gase_id'));
    }

} 

?>

View : edit.ctp
<?php 

echo $this->form->create('HgCylinder',array('action'=>'edit'));
echo $this->form->input('hg_key_gase_id',);
echo $this->form->input("capacityM3");
echo $this->form->input("weightEmpty");
echo $this->form->input("weightFilled");
echo $this->form->input("isFilled");
echo $this->form->end('Add');
?>

我的问题是hg_key_gase_id成为没有选项的选择列表。如果我在视图和控制器中将名称更改为“hgKeyGas”,则会显示hg_key_gases表中的选项。但是在保存时不会在hg_cylinders表中保存hg_key_gase_id字段的值,而是在此字段中存储null。

第二,我想知道有必要传递变量名称来自控制器,与表中的字段完全相同。

1 个答案:

答案 0 :(得分:0)

尝试坚持惯例。

所以

$hgKeyGases = $this->HgCylinder->HgKeyGase->find('list');

$this->set(compact('hgKeyGases'));

复数形式将能够填充您的选择框(如烹饪书中所述)

也使用$ this-&gt; Form-&gt; input()(注意大写字母F)。 $ name不是必需的。 不要使用read(),而是使用find(first)代替。不要设置动作(默认情况下表单会自动发布)。

最重要的是。始终尊重文件系统中的文件大小。特别是如果您计划在NIX系统上部署(区分大小写)。 所以它是HgCylinder.php和HgKeyGase.php作为Model类文件。

最后提示:使用烘焙(通过shell控制台烘烤蛋糕)来烘焙您的crud文件。这样你就可以了解它是如何以正确的方式完成的。顺便说一句,它本身也会回答你的问题。

可以在此处找到文档:http://book.cakephp.org/2.0/en/index.html 也许你发现了一个旧的过时版本,2.x是你应该使用的版本。