简体   繁体   中英

cakephp insert data on database of linked models

I have two models "Ficha" and "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'
        )
    );
}

As you can see they are "linked". Now, in the code i have a form for Ficha that the method "add()" of FichasController redirects to my Perigo Model:

add() (of 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.');
        }

    }
}

The redirection is made to a form that exists in PerigosController.

add.ctp (of 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() (of 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.');
        }

    }
}   

but there's something i don't know how to do it. Since the models are relational, and the same happens with the two tables on the database (the table perigos has a foreignkey that is the primary key of the table "fichas", how can i insert the data on table perigos in database? I mean, how can i get the key of the Ficha inserted in the first form and insert her in the foreign key of "perigos" when i submit this second form?

As @mark says, your redirection is bad, it should include the id in the URL array:

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

Like this you are passing the parameter by URL. In the add action of your PerigosController you should have an $idFicha param at the method:

//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)) {
          //...
        }
    }
}

Data submitted by POST method in a form will be always contained in an array of this type: $this->request->data['Model_name'] . In your case:

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

Another way to do this, is using sessions if you prefer to hide the id value: http://book.cakephp.org/2.0/en/core-libraries/components/sessions.html#sessions

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM