Yii Framework Forum: Model Relations E Condizioni - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Model Relations E Condizioni Rate Topic: -----

#1 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 336
  • Joined: 10-April 12

Posted 11 March 2013 - 05:41 AM

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;

0

#2 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,987
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 11 March 2013 - 09:19 AM

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;

1

#3 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 336
  • Joined: 10-April 12

Posted 11 March 2013 - 10:16 AM

grazie. in effetti non c'avevo pensato abbastanza.
la pulizia di questa soluzione mi aggrada! ;)
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users