yii e relazioni

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)



nelle relazioni “relations” cambierei ‘clienti_id’ per ‘id_cliente’. Poi, se nn c’è il parametro ‘id_cliente’ nel form fare il salvataggio paso a paso, tipo:




$modelRecapiti->id_cliente = $model->id; 

$modelRecapiti->save(false);



Spero sia di aiuto!

Ho risolto ed ho capito il problema, mi sono stati molto di aiuto queste due pagine:

yii relations

Store foreignkey

Grazie, è proprio ciò che ho fatto, eravamo entrambi online quando hai risposto.

Ma ora ho pure la tua conferma :slight_smile:

ciao anch’io ho questi dubbi, vorrei creare un form per modificare ad esempio due tabelle che sono prodotto e descrizione prodotto…

innanzitutto chiedo :) devo creare i due model?

come posso creare un form ovviamente con un controller e model che manipolino i dati di queste due tabelle?

grazie mille sono un po confuso

SOS :(

Ad ogni tabella deve essere sicuramente associato un model,

utilizza questa guida http://www.yiiframework.com/doc/guide/1.1/it/topics.gii per creare il model, controller e poi Crud e vedi quello che viene generato!

ok ho da creare un view con le tabelle categoy e category_description la cui relazione è con category_id

dunque queste due tabelle hanno dei campi che voglio visualizzare, come posso mostrarli in un form tipo quelli generati da gii??

Ciao ragazzi,

calcolando che uso Yii2…

io ho lo stesso quesito e non ne riesco ad uscirne fuori… chiedo gentilmente il Vostro contributo.

ho ben o male la stessa situazione iniziale di messema.

Allora … due tabelle :

  • user -

id

username

nome

cognome

  • user_ecapiti -

id

ks_user_id

tipo_recapito

numero_recapito

Creo i due models tramite GII

e nel model User inserisco :




/**

     * @return \yii\db\ActiveQuery

     */

	 

 public function relations()

    {

        return array(

            'user_rec'=>array(self::HAS_MANY, 'Recapiti', 'ks_user_id'),

            //'profile'=>array(self::HAS_ONE, 'Profile', 'owner_id'),

        );

    }

	




Nel model UserRecapiti inserisco :




/**

     * @return \yii\db\ActiveQuery

     */

public function relations()

    {

        return array(

            'author'=>array(self::BELONGS_TO, 'User', 'ks_user_id'),

            //s'categories'=>array(self::MANY_MANY, 'Category',

                //'tbl_post_category(post_id, category_id)'),

        );

    }



Adesso devo visualizzare nel form view i recapiti a seconda del tipo…

Esempio avrò :

id: 3

username : admin

Nome : Mario

Cognome: Rossi

Fisso_Casa: 06.123456

Fisso_Ufficio: 06.111222

Cellulare_personale: 333.9879871

Cellulare_uff: 444.1231231

Fax: 111.11111

Email: mariorossi@ita.it

Web: www.mariorossi.it

Queste info mi servono nella view, nell’update e nel create.

Come procedo nella programmazione ???

Grazie a tutti in anticipo.

Ciao,

se stai usando Yii2 ti consiglio di aprire una nuova discussione mentre per quanto riguarda le relazioni leggi attentamente la guida e in particola la sezione sulle relazioni!

Se hai altri dubbi apri una nuova discussione ;)

Grazie per il tuo intervento… siccome non riesco a capire… scusate se mi è ostica la situazione… preferisco aprire altra discussione come da consiglio di Nicola.

be se riesci magari mi mostri anche a me come hai fatto perchè non so ancora come…

ho letto le guide ma non so come passarli al controller e visualizzarli nel form tipo con delle dropdownlist ad esempio…

è possibile creare con gii un form che mostri i campi relazionati o altrimenti un esempio?

Purtroppo non ho risolto ancora. Infatti ho aperto altra discussione :smiley: