CRUD per MANY_MANY con droplist


(Normalprobabilityplot) #1

Ciao a tutti,

ho cercato di arrangiarmi cercando nella documentazione tuttavia non sono riuscito a risolvermi un problema.

si suppone che io abbia una tabella utenti e una tabella attività

per gestire la relazione n a n ho una tabella che si chiama utenti_attivita

la tabella attivita ha una chiave esterna verso attività e una chiave esterna verso utenti. queste coppie di valori mi permettono di fare in modo che un utente abbia n attività e n utenti siano associati ad una attività

mi serve gestire le associazioni tra queste due tabelle tramite interfaccia.

ho creato il Crud di attivita e il crud di utenti . Ottimo.

se creo il crud di utenti_Attivita questo mi crea un inserimento di id, ma chiaramente questo non è leggibile ne gestibile : io vorrei che al posto degli id ci fossero delle drop list che hanno come label i dati associati.

fosse php puro, con una inner join unirei le due tabelle e non ci sarebbe alcun problema. ma con yii come faccio a fare un crud su una tabella che gestisce relazioni?

grazie della gentile attenzione.

Andrea


(Marco Patania) #2

http://www.yiiframework.com/doc/guide/1.1/en/database.arr#declaring-relationship

http://www.yiiframework.com/forum/index.php?/topic/9694-many-many-question/page__p__47769__hl__many+many#entry47769


(Matteo Falsitta) #3

Quando crei il crud hai 2 textbox, e vuoi sostuirle con due dropdown list, giusto?

Allora al posto della textbox mettici:


<?php echo $this->dropDownList($model, 'id_attivita', CHtml::listData(Attivita::model()->findAll, 'id', 'descrizione')) ?>

<?php echo $this->dropDownList($model, 'id_utenti', CHtml::listData(Utenti::model()->findAll, 'id', 'nome')) ?>


(Normalprobabilityplot) #4

fantastico, ti ringrazio molto!!!


(Normalprobabilityplot) #5

scusami … mi dispiace disturbarti ancora … anche in altre guide dicono di usare findAll, ma findAll non è definito nel modello della mia tabella del database… e quindi non funziona …

le operazioni che conduco sono

creo il modello per la tabella

creo il crud per la tabella

in questo caso mi serve per una relazione 1 : n , dove ad esempio un progetto ha un cliente associato, allora nel _form.php della view dei progetti scrivo

//<?php echo $form->textField($model,‘customer_related’); ?>

<?php echo $this->dropDownList($model, ‘idcustomer’, CHtml::listData(Customer::model()->findAll, ‘idcustomer’, ‘customer_name’)) ?>

tuttavia però ottengo :

CException

Property "Customer.findAll" is not defined.

in effetti nel modello di Customer non esiste la definizione di findAll alchè ho iniettato

function findAll(&#036;condition='',&#036;params=array())


    {


            Yii::trace(get_class(&#036;this).'.findAll()','system.db.ar.CActiveRecord');


            &#036;criteria=&#036;this-&gt;getCommandBuilder()-&gt;createCriteria(&#036;condition,&#036;params);


            return &#036;this-&gt;query(&#036;criteria,true);


    }

all’interno del modello ma non funziona e mi sa che sto facendo macello …

grazie scusami …


(Normalprobabilityplot) #6

io ho sostituito

	&lt;?php echo &#036;form-&gt;labelEx(&#036;model,'id_related_release'); ?&gt;


	&lt;?php echo &#036;form-&gt;textField(&#036;model,'id_related_release',array('size'=&gt;45,'maxlength'=&gt;45)); ?&gt;


	&lt;?php echo &#036;form-&gt;error(&#036;model,'id_related_release'); ?&gt;

con

	&lt;?php echo &#036;form-&gt;labelEx(&#036;model,'id_related_release'); ?&gt;


	&lt;?php echo &#036;this-&gt;dropDownList(&#036;model, 'id_related_release', CHtml::listData(Project::model()-&gt;findAll, 'idproject', 'project_name')) ?&gt;


	&lt;?php echo &#036;form-&gt;error(&#036;model,'id_related_release'); ?&gt;

posto che il mio modello Project contiene

  • @property integer $idproject

  • @property string $project_name

e che estende, per default, CActiveRecord ,

non capisco ancora perchè ottenga l’errore

Property "Project.findAll" is not defined.

potresti aiutarmi ancora, per cortesia? grazie…


(Normalprobabilityplot) #7

il problema stava nel fatto che findAll non è ne proprietà ne un getter … andava scritto cosi

	&lt;?php echo &#036;form-&gt;dropDownList(&#036;model, 'id_related_release', CHtml::listData(Release::model()-&gt;findAll(), 'idrelease', 'release_name')) ?&gt;

con le parentesi =)))

grazie