1

我是蛋糕新手,使用的是第 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_key_gase_id 字段的值保存在 hg_cylinders 表中,而是在该字段中存储 null。

其次,我想知道有必要将变量名称从控制器传递给视图,与表中的字段完全相同。

4

1 回答 1

0

尽量遵守约定。

所以是

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

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

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

也使用 $this->Form->input() (注意大写 F)。$name 不是必需的。不要使用 read(),而是使用 find(first)。不要设置操作(默认情况下表单将发布到自身)。

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

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

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

于 2012-11-08T14:01:33.217 回答