Yii Framework Forum: Afterfind E Beforesave - Yii Framework Forum

Jump to content

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

Afterfind E Beforesave Rate Topic: -----

#1 User is offline   Glider 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 6
  • Joined: 26-November 12

Posted 29 September 2013 - 04:51 AM

Ciao a tutti,
ho una semplicissima domanda da chiedervi (essendo newbie, spero non sia troppo stupida).

In una tabella del DB ho creato un campo che può essere 0 o 1 e che significa che un utente è di un certo tipo.
Esempio: 0 = allievo, 1 = istruttore

Ovviamente quando visualizzo le proprietà dell'utente nelle view quel campo è popolato con 0 o 1 mentre vorrei far vedere l'attributo allievo o istruttore.

Pensavo di mettere questa banale logica nel model "Utente" nei metodi afterFind e beforeSave che fanno questa semplice trasformazione.

Secondo voi è corretto usare quei metodi nel model o sarebbe meglio lavorare nel controller?

Grazie
0

#2 User is offline   sensorario 

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

Posted 29 September 2013 - 05:47 AM

Secondo me ti conviene semplicemente trattare quel campo come una stringa ed eliminare questo tipo di problema. Che cosa te ne viene dal salvare un campo 0 oppure 1 e non direttamente 'allievo' oppure 'istruttore'?
0

#3 User is offline   st4nny 

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

Posted 29 September 2013 - 05:57 AM

puoi usare sicuramente l'afterfind, ma se non hai particolari esigenze che nel model/nei model, l'attributo sia diversamente tipizzato.. puoi fare una cosa del genere:

nelle view
 
select per le form:
 echo $form->dropDownList($model, 'attributo', Model::userOptions);
come visualizzarlo:
 echo Model::userOptions($model->attributo);


nel model
public static function userOptions($code=NULL) {
                $_items = array(
        0 => 'Allievo',
        1 => 'Istruttore',
    );
                if (isset($code))
                        return $_items[$code];
                else
                        return $_items;
}

1

#4 User is offline   Glider 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 6
  • Joined: 26-November 12

Posted 29 September 2013 - 05:59 AM

View Postsensorario, on 29 September 2013 - 05:47 AM, said:

Secondo me ti conviene semplicemente trattare quel campo come una stringa ed eliminare questo tipo di problema. Che cosa te ne viene dal salvare un campo 0 oppure 1 e non direttamente 'allievo' oppure 'istruttore'?


Ciao e grazie per la risposta.

Era per avere un DB più pulito; in effetti devo creare un campo nel DB con due soli attributi possibili quindi dovrei usare o un campo binario o un ENUM o SET.
Siccome nelle "best practice" di mysql ho visto che per queste cose usare un ENUM o SET non conviene volevo farlo con un campo binario.
Se usassi un campo stringa potrei inserire nel DB qualsiasi stringa mentre il dominio dei miei dati è composto da due soli elementi.
Certo potrei sempre controllare lato applicativo che i dati inviati siano sempre e solo quei due possibili...controllo che dovrei comunque fare in un Controller o nel Model.


Grazie
0

#5 User is offline   sensorario 

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

Posted 29 September 2013 - 06:15 AM

Valuta sempre tu il trade off tra avere un db in terza forma normale o fare meno join possibile. Pensaci: se ti limiti ad avere un campo stringa, ed una compo da scegliere, il codice ed i calcoli da fare sono pochi. Se sai già a priori che non metterai altri valori, è davvero così importante trasformare un campo in numerico? Sarebbe meno leggibile. Sicuramente ti sei proposto questa strada perché sei abituato ad usare chiavi esterne, ma qui parliamo di due soli valori. Che vantaggi trai dal scegliere una strada piuttosto che un'altra?
0

#6 User is offline   Glider 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 6
  • Joined: 26-November 12

Posted 29 September 2013 - 06:21 AM

View Postsensorario, on 29 September 2013 - 06:15 AM, said:

Valuta sempre tu il trade off tra avere un db in terza forma normale o fare meno join possibile. Pensaci: se ti limiti ad avere un campo stringa, ed una compo da scegliere, il codice ed i calcoli da fare sono pochi. Se sai già a priori che non metterai altri valori, è davvero così importante trasformare un campo in numerico? Sarebbe meno leggibile. Sicuramente ti sei proposto questa strada perché sei abituato ad usare chiavi esterne, ma qui parliamo di due soli valori. Che vantaggi trai dal scegliere una strada piuttosto che un'altra?


Solo vantaggio pulizia DB.
Cmq, potrei usare un ENUM e risolvere il tutto visto che gli attibuti sono solo due.


Grazie
0

#7 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

Posted 07 October 2013 - 02:57 AM

Io uso gli enum e creo le dropdown leggendo la descrizione della tabella dal db:

		$attr=$this->attribute;
		CHtml::resolveNameID($this->model,$attr, $this->htmlOptions);
		$type=$this->model->tableSchema->columns[$attr]->dbType;
		if (strpos($type, 'enum(')!== false){
			$off=strpos($type,"(");
			$enum=substr($type, $off+1, strlen($type)-$off-2);
			$keys=str_replace("'",null,explode(",",$enum));
			for($i=0;$i<sizeof($keys);$i++)
				$values[$keys[$i]]=Yii::t('enumItem',$keys[$i]);
			return $values;
		}


Cosi' se ti compare un altro valore non devi fare altro che alterare il db.
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