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
Page 1 of 1
Domanda Relations
#2
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
#3
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
ed ho modificato nello stesso model il search
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 ?
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
Ricordalo quando fai il debug
#4
Posted 15 November 2012 - 06:46 AM
realtebo, 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
ed ho modificato nello stesso model il search
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 ?
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...
#5
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....
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
Ricordalo quando fai il debug
Share this topic:
Page 1 of 1