new MyModel('search')?

Ciao ragazzi,

vorrei un aiutino nel capire come funziona una cosa che mi sfugge.

L’ Yii crud generator genera:

  1. La riga

$model=new FlkActivities('search');

nel metodo adminAction() del mio controller ActivitiesController.

  1. Il metodo search() nel model FlkActivities corrispondente.

Sembra che il metodo search() sia chiamato automaticamente dal comando new FlkActivities(‘search’), ma sono un po’ confuso dalla sintassi di quel comando e del perchè questo succeda e dal fatto che sembra che search() sia chiamato ‘in ogni caso’:infatti ho provato a chiamare alternativamente sia new FlkActivities() senza parametri, che new FlkActivities(‘mysearch’) riferendomi ad un altro metodo da me creato mysearch() nel model, ma sembra che venga chiamato sempre e comunque il metodo search().

Mi potete aiutare a capire perchè? C’è un particolare funzionamento rispetto al metodo chiamato ‘search’ che il framework mette in atto? O che cosa mi sfugge?

Il mio intento era aggiungere una condizione ‘order by’ al model ricavato dal comando $model=new FlkActivities(‘search’) e l’unico modo che ho trovato per farlo è stato creare uno scope che eseguisse l’‘order by’ e modificare il codice nel metodo search():

  1. Lo scope:

public function scopes()

    {

        return array(

            'ordByNewer'=>array(

                'order'=>'pdate DESC',

            ),

        );

    }

  1. La modifica nel metodo search() da così:

.....

return new CActiveDataProvider($this, array(

			'criteria'=>$criteria,

		));

a così




.....

return new CActiveDataProvider($this->ordByNewer(), array(

			'criteria'=>$criteria,

		));



Funziona, ma avrei voluto tenere la call a ordByNewer() fuori dal search, facendo una cosa tipo




new FlkActivities('search')->ordByNewer()



che ovviamente non funziona :(

Qualche suggerimento?

Grazie!

Andrea

Mmmm io in genere lascio il Model così com’è e casomai aggiunto metodi. Tipo:

User::quelliAttivi();

User::quelliNonAttivi();

Alla fine mi creo tanti piccoli metodi come il search, modificando solo il parametro criteria. Non so se sia il metodo migliore, ma è il mio preferito perché mi permette di essere estremamente sintetico nelle query. Model::quelloCheMiServe();

Da dove ti e venuta questa idea :o

La classe base dei model e CActiveRecord… e il __constructor di questa classe ha un parametro "scenario" - http://www.yiiframew…onstruct-detail

Leggi anche questa parte della definitive guide - http://www.yiiframew…safe-attributes

Grazie delle risposte ragazzi!

In particolare a te mdomba, che mi hai levato dalla testa quella mia distorta interpretazione :lol: