Yii Framework Forum: Domanda Relations - Yii Framework Forum

Jump to content

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

Domanda Relations Rate Topic: -----

#1 User is offline   Giacomo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 69
  • Joined: 03-October 12

Posted 14 November 2012 - 09:37 AM

Ciao a tutti. Ho un problemino con le relation.
Ho 3 tabelle, diciamo ad esempio panino, ingrediente, ingrediente_panino.
Dentro panino uso la relation HAS_MANY su ingrediente_panino
Dentro ingrediente_panino, la relation BELONGS_TO su ingrediente

Nella tabella ingrediente, ho una colonna 'ordine', che dovrebbe stabilire l'ordine di visualizzazione degli ingredienti di tutti i panini. Quindi nel momento in cui l'ordine degli ingredienti cambia dentro ingrediente, quando visualizzo gli ingredienti di un panino, dovrebbero essere visualizzati con quell'ordine. E' possibile farlo?

Il risultato riesco ad ottenerlo utilizzando sql, ma vorrei, se possibile, realizzarlo con le reletions, così da non dover modificare le varie viste.

Grazie mille
0

#2 User is offline   paskuale 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 364
  • Joined: 30-December 11
  • Location:Italy, Bari

Posted 15 November 2012 - 03:19 AM

Così a naso ... credo che ti convenga dare un occhiata alla funzione criteria() dove puoi aggiungere una condizione, tipo (order by campo asc/desc), all'interno del $model
1

#3 User is offline   realtebo 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 621
  • Joined: 03-October 12
  • Location:Ferrara

Posted 15 November 2012 - 05:14 AM

si confermo, ti faccio un esempio:
io ho un oggetto Item che ha proprietà un itemSizeId.

Nel visualizzare gli item devo poterli ordinare per size, e NON per itemSizeId come farebbe di suo Yii.

Nel model di Item ho la mia relation


   "itemSizeObj" => array(self::BELONGS_TO, 'ItemSize', 'itemSizeId' ),


ed ho modificato nello stesso model il search
...
return new CActiveDataProvider($this, array(
		'criteria'=>$criteria,
	        'sort'=>array(
	                'attributes'=>array(
	                        'itemSizeId'=>array(
	                                'asc'=>'itemSizeObj.description',
	                                'desc'=>'itemSizeObj.description DESC',
	                        ),
	                        '*',
	                ),
	        ),
		));
	}



il che dice alla CGRidView che riceve i dati, di ordinare per itemSize usando la description e non l'id.

Mi chiarisci le relazioni 1-N o N-N delle tue tabelle eventualmente ?
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

#4 User is offline   Giacomo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 69
  • Joined: 03-October 12

Posted 15 November 2012 - 06:46 AM

View Postrealtebo, on 15 November 2012 - 05:14 AM, said:

si confermo, ti faccio un esempio:
io ho un oggetto Item che ha proprietà un itemSizeId.

Nel visualizzare gli item devo poterli ordinare per size, e NON per itemSizeId come farebbe di suo Yii.

Nel model di Item ho la mia relation


   "itemSizeObj" => array(self::BELONGS_TO, 'ItemSize', 'itemSizeId' ),


ed ho modificato nello stesso model il search
...
return new CActiveDataProvider($this, array(
		'criteria'=>$criteria,
	        'sort'=>array(
	                'attributes'=>array(
	                        'itemSizeId'=>array(
	                                'asc'=>'itemSizeObj.description',
	                                'desc'=>'itemSizeObj.description DESC',
	                        ),
	                        '*',
	                ),
	        ),
		));
	}



il che dice alla CGRidView che riceve i dati, di ordinare per itemSize usando la description e non l'id.

Mi chiarisci le relazioni 1-N o N-N delle tue tabelle eventualmente ?



Ciao, grazie per i consigli! però io non volevo usare il CActiveDataProvider, ma sfruttare le relations.
Rimaniamo sempre sull'esempio del panino, dentro la view ho
$ingredienti = $istanza_panino->ingredienti_panino;
foreach($ingredienti as $ingrediente_panino)
echo $ingrediente_panino->ingrediente->nome

solo che l'ordine dovrebbe essere quello generico stabilito nella tabella 'ingrediente', non l'ordine dentro ingrediente_panino. Forse potrei ciclare l'array e riordinarmelo da me...
0

#5 User is offline   realtebo 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 621
  • Joined: 03-October 12
  • Location:Ferrara

Posted 15 November 2012 - 08:19 AM

Passo, a questa non so rispondere.

Ritengo comunque che l'approccio migliore sia dal CActiveProvider ricavare (con una riga di codice) il CArrayDataProvider e poi fare il foreach su quello....
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
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