Model Relations E Condizioni

Buongiorno a tutti,

vi descrivo brevemente qual’è la questione.

La tabella ha pochi campi, quelli necessari diciamo, ogni record è distinto da un determinato tipo.

Quindi a seconda del tipo mi collego a una tabella esterna di anagrafica, campi testuali e altre cose.

mettiamo il caso di distinguere tre diversi tipi.

Io ad esempio ho la tabella Progetto, che mi tiene insieme tutti i progetti, di progetti ce ne possono essere di tre tipi. ogni tipo ha la sua tabella di dettaglio.

Ora se io volessi impostare delle relations sul tipo

per descrivere questa situazione, voi cosa mi consigliereste?

il codice che posto qui sotto mi genera un’eccezione “La proprietà “Progetto”.“tipo_id” non è definita.”




	if($this->tipo_id==1)		

	      $dettaglio = array('dettaglio'=>array(self::HAS_ONE, 'Dettaglio1', 'id'));

		

	$relations = array(

		 'user'=>array(self::BELONGS_TO, 'User', 'user_id'),

                  ...

		);	

	$relations = array_merge($relations,$dettaglio);

	return $relations;



Io parto da questo ragionamento: potresti avere tre relazioni diverse a seconda dei dettagli da recuperare.




        $relations = array(

                 'dettagliBlu'=>array(self::BELONGS_TO, 'DettaglioBlu', 'project_id'),

                 'dettagliVerdi'=>array(self::BELONGS_TO, 'DettaglioVerdi', 'project_id'),

                 'dettagliRossi'=>array(self::BELONGS_TO, 'DettaglioRossi', 'project_id'),

         );



Do per scontato che ci sia un campo che ti dice qual’è la relazione da usare. Supponiamo che sia un campo di testo.

A questo punto, esporrei nel model un metodo cui delegare il compito di sapere a quale relazione deve aggrapparsi:




        public function getDettaglio() {

            if($this->attributo = 'blu') {

                return $this->dettagliBlu;

            }

            if($this->attributo = 'verdi') {

                return $this->dettagliVerdi;

            }

            if($this->attributo = 'rossi') {

                return $this->dettagliRossi;

            }

        }



Dato un progetto:




        $progetto = new Progetto();



Ti baseterà usare getDettaglio per avere tutte le informazioni che ti servono:




        $progetto->getDettaglio()->campo;



grazie. in effetti non c’avevo pensato abbastanza.

la pulizia di questa soluzione mi aggrada! ;)