Domanda Relations

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

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

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…

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…