0

我有两个模型“Ficha”和“Perigo”:

class Ficha extends AppModel {

    var $primaryKey = 'id_ficha';

    public $validate = array(
        'nome_produto' => array(
            'rule' => 'notEmpty'
        ),
        'versao' => array(
            'rule' => 'notEmpty'
        ),
        'data_ficha' => array(
            'rule' => 'notEmpty'
        )
    );
}


    class Perigo extends AppModel {


    var $belongsTo = array(
        'Ficha' => array(
            'className'    => 'Ficha',
            'foreignKey'   => 'id_fichas'
        )
    );
}

如您所见,它们是“链接的”。现在,在代码中,我有一个 Ficha 表单,FichasController 的方法“add()”重定向到我的 Perigo 模型:

add() (FichaController)

    public function add() {
//pr($this->request->data); // to get the data from the form

    if ($this->request->is('post')) {
        $this->Ficha->create();
        if ($this->Ficha->save($this->request->data)) {
            $this->Session->setFlash('Your post has been saved.');
            //$last_id=$this->Ficha->getLastInsertID();
            //$this->redirect(array('action' => 'preencher_ficha'),$last_id);
            $this->redirect(array('controller'=>'perigos', 'action' => 'add'),$last_id);
        } else {
            $this->Session->setFlash('Unable to add your post.');
        }

    }
}

重定向到 PerigosController 中存在的表单。

add.ctp (Perigo)

echo $this->Form->create('Perigo');
echo $this->Form->input('class_subst', array('label' => 'Classificação da substância ou mistura:'));
echo $this->Form->input('simbolos_perigo', array('label' => 'Símbolos de Perigo:'));
echo $this->Form->input('frases_r', array('label' => 'Frases R:'));
echo $this->Form->end('Avançar');

add() (PerigoController)

    public function add() {

    if ($this->request->is('post')) {
        $this->Perigo->create();
        if ($this->Perigo->save($this->request->data)) {
            $this->Session->setFlash('Your post has been saved.');
            $this->redirect(array('controller'=>'perigos', 'action' => 'index'));
        } else {
            $this->Session->setFlash('Unable to add your post.');
        }

    }
}   

但有些事情我不知道该怎么做。由于模型是关系模型,数据库上的两个表也是如此(表 perigos 有一个外键,它是表“fichas”的主键,我如何在数据库中的表 perigos 上插入数据?我的意思是,当我提交第二个表单时,如何获取插入第一个表单的 Ficha 的密钥并将她插入“perigos”的外键?

4

1 回答 1

1

正如@mark 所说,您的重定向很糟糕,它应该包含id在 URL 数组中:

$this->redirect(array('controller'=>'perigos', 'action' => 'add', $last_id));

像这样,您通过 URL 传递参数。在您的add操作中,您PerigosController应该$idFicha在方法中有一个参数:

//PerigosController.php
public function add($idFicha){
    //here you can use $idFicha
    ...

    //when submiting the Perigos form, we add the foreign key.
    if($this->request->is('post')){

        //adding the foreign key to the Perigo's array to add in the DB.
        $this->request->data['Perigo']['ficha_id'] = $idFicha;

        if ($this->Ticket->save($this->request->data)) {
          //...
        }
    }
}

通过表单中的方法提交的数据POST将始终包含在这种类型的数组中:$this->request->data['Model_name']。在你的情况下:

$this->request->data['Perigo']

另一种方法是使用会话,如果您希望隐藏该id值: http ://book.cakephp.org/2.0/en/core-libraries/components/sessions.html#sessions

于 2012-12-11T12:04:06.777 回答