[Yii 1] Aiuto Con Criteria E Relations

Salve a tutti, ho 4 tabelle:

user con campi:




id - agenzia_id - nome - cognome - username - password - session - data_registrazione



cap con campi:




id - cap_id - cap_dest - agenzia_id - agenzia_nome_completo - status - comune_id - comune - provincia_id - provincia



agenzia con campi:




id - user_id - cap_id - comune_agenzia  - provincia_agenzia - codice - nome_completo - operatori - date - ditta nome - cognome



rs con campi:




id - tracking_esterno - nome_mitt - cognome_mitt - ubicazione_mitt - via_mitt - civico_mitt - cap_mitt - comune_mitt - provincia_mitt - stato_mitt - nome_dest - cognome_dest - ubicazione_dest - via_dest - civico_dest - cap_dest - comune_dest - provincia_dest - stato_dest - informazioni - agenzia_mitt - agenzia_dest - peso - prezzo - diritti - iva - totale - esito - tipoconsegna - vettore - date - time - prodotto



Vorrei che nella vista index di “Rs” l’ utente loggato (collegato alla sua agenzia tramite la relazione User Agenzia) potesse vedere solo le “Rs” (Racc Semplici) che appartengono alla sua Agenzia.

Relazione Agenzia User




'users'=>array(self::BELONGS_TO, 'User', 'user_id'),



Relazione User Agenzia




'agenzie'=>array(self::BELONGS_TO, 'Agenzia', 'agenzia_id'),



Ogni Agenzia può essere gestita da vari utenti. Ogni Agenzia ha vari comuni in gestione tramite la relazione Agenzia Cap.




'cap'=>array(self::HAS_MANY, 'Cap', 'agenzia_id'),



Ora sono intrippato e non riesco a capire come fare per far si che ogni utente loggato possa vedere solo le Rs dirette verso la sua agenzia. Non capisco se mi mancano campi nel databse per poter legare le tabelle. Ho provato mille relazioni e un po di criteria ma non riesco a venirne fuori.

Qualcuno può aiutarmi a risolvere con relazioni e criteri di comparazione dati, per poter ottenere ciò che mi serve? Perfavore!!!

Guardando velocemente il tuo caso, l’unica cosa che mi viene (al volo) da consigliarti è di precisare nel terzo parametro le due chiavi della relazione:

es. per le agenzie dell’user,dentro il model User (relations):


'Agenzie' => array(self::BELONGS_TO, 'Agenzia', array('chiave_1'=>'chiave_2'))

molte volte (nn sò il perchè) non è sufficiente passare una chiave…

ciao

Ciao pasquale e grazie per il tuo consiglio.

Però poi nella vista come gestisco il criteria?

Nel controller Rs alla actionIndex che criteria inserisco?

Mi puoi fare un esempio se hai tempo? Senno grazie lo stesso :)

Intanto dopo cena faccio come dici e inizio a provare con i criteria.

Rieccomi qui!!!

Ho provato a inserire una seconda chiave ma mi da errori:




L'active record "User" ha una configurazione non valida per la relazione "agenzie". Devono essere specificati il tipo di relazione, l'active record relazionato e la chiave esterna.



Vedo che va a cercare nell’ action Login:




13      * Authenticates a user.

14      * @return boolean whether authentication succeeds.

15      */

16     public function authenticate()

17     {

18         $user=User::model()->find('LOWER(username)=?',array(strtolower($this->username))); 

NELLA RIGA 18 MI EVIDENZIA L ERR0RE.!!!


19         if($user===null)

20             $this->errorCode=self::ERROR_USERNAME_INVALID;

21         else if(!$user->validatePassword($this->password))

22             $this->errorCode=self::ERROR_PASSWORD_INVALID;

23         else

..................



Uff non riesco a cavarne piede. Non è possibile fare delle query sql con join per confrontare che l’ agenzia_id (prezo dalla tabella user) dell’ utente loggato, corrisponda all’ agenzia Id della tabella Rs facendo un controllo in tutti i record di questa tabella e mostrando solo quelli che hanno l’ agenzia_id dell’ utente attualmente loggato? Oddio forse sto dicendo fesserie…e chiedo scusa. Ma mi serve trovare una soluzione a questo problema e inizio a darci di matto!!! :angry:

Incolla qui la relation Agenzia che hai nel model User, così vediamo un pò, scusa il ritardo nel risp !! Ciao

Ciao paskuale e grazie della risposta.

Mi dava errore perchè ho sbagliato a inserire il codice…non usavo l’ array ma inserivo solo


'campo1'=>'campo2'

Quindi ho corretto l’ errore, ma ancora non riesco a far visulizzare le raccomandata come voglio. Praticamente ogni utente può vedere qualsiasi raccomandata, quando invece dovrebbe vedere solo le raccomandate appartenenti alla sua agenzia. Prima o poi mi rinchiuderanno in qualche casa di cura ;D cosi darò sfogo alla mia pazzia ;D

Questa e la relation che ho attualmente nel Model User




'agenzie'=>array(self::BELONGS_TO, 'Agenzia', 'agenzia_id'),



Ho provato a inserire




'agenzie'=>array(self::BELONGS_TO, 'Agenzia', array('agenzia_id'=>'operatori')),



ma non cambia nulla.

Mi sono infilato in un tunnel e ora ho il cervello molto molto molto incasinato!!! :D