Cerco di capire come funzionano le relazioni.
Ho creato due tabelle che hanno una relazione 1-molti:
----CLIENTI---
--id (PK)--nome--cognome
----RECAPITI_CLIENTI---
--id_recapito (PK)--id_cliente (FK)--telefono
ho creato i models tramite gii ed ho inserito in "relations" del model CLIENTI:
public function relations()
{
return array(
'clienti' => array(self::BELONGS_TO, 'recapiti_clienti', 'clienti_id')
);
}
e nel model RECAPITI_CLIENTI:
public function relations()
{
return array(
'recapiti_clienti' => array(self::HAS_MANY, 'clienti','clienti_id')
);
}
questo è il mio ClientiController:
if(isset($_POST['Clienti'], $_POST['RecapitiClienti']))
{
$model->attributes=$_POST['Clienti'];
$modelRecapiti->attributes=$_POST['RecapitiClienti'];
$validazione=$model->validate();
$validazione=$modelRecapiti->validate() && $validazione;
if($validazione){
// use false parameter to disable validation
$model->save(false);
$modelRecapiti->save(false);
//redirect
$this->redirect(array('view','id'=>$model->id_cliente));
}
}
Quando invio il form e scrivo sul db mi da errore:
CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`miodb`.`recapiti_clienti`, CONSTRAINT `recapiti_clienti_ibfk_1` FOREIGN KEY (`id_cliente`) REFERENCES `clienti` (`id_cliente`)). The SQL statement executed was: INSERT INTO `recapiti_clienti` (`telefono`, `id_cliente`) VALUES (:yp0, :yp1)