[Risolto] Permettere Visualizzazione In Base A Un Parametro

ottimo lavoro, ma manca in User il suo agenzia_id o id_agenzia come vuoi chiamarlo.

Se puoi farlo,se puoi introdurre questo nuovo campo, tutto il resto che chiedi viene molto semplice

direi che telegramma potrebbe semplicemente avere un ‘cap_gestiti_id’. o no?

L’ id_agenzia nella tabella user lo ottenevo con la relations tra le due tabelle. Vuoi che relaziono o inserisco a mano un campo id_agenzia nella tabella user?? Lo stesso faccio nella tabella Telegramma o la relaziono a cap?

Non so se hai gia letto questo messaggio…aggiungo una cosa…i campi che dici devono essere required? Io vorrei che li prendesse in automatico in base al user che inserisce il telegramma ovviamente.

Ho inserito il tutto a mano, aggiornato i model e le view. Ho messo id_agenzia e cap_gestiti_id come required. Resto in attesa °__°

Ok.

Hai già qualcosa che gestisca la lista dei telegrammi?

cioè una controller Telegrammi / actionAdmin o simile ?

Se si agiamo li dentro, sennò, crea tramite gii il crud per il model Telegrammi

Buongiorno realtebo, si ho già creato sia il model Telegrammi e anche tutte le viste tramite Crud.

Ora ora hai quidni una actionAdmin per i telegrammi, o una actionIndex.

Scegli quale usare ma il concetto è lo stesso.:

Tu parti da qualcosa di simile




public function actionIndex()

	{

		$dataProvider=new CActiveDataProvider('Telegrammi');

		$this->render('index',array(

			'dataProvider'=>$dataProvider,

		));

	}



L’idea è ricavare lo user_id attualmente loggato




$user_id = Yii::app()->user->id



Ricavare lo user nel senso dell’utente registrato




$user = Utente::model()->findByPk($user_id);



A questo punto interviene la prima relazione: un Utente APPARTIENE ad una Agenzia, quindi dentro al modello dell’utente avrai una relation così




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



In questo modo, sempre nella action, puoi ottenere la sua agenzia




$user_agency = $user->agenzia;



L’agenzia deve avere una relazione many_many con cap_gestiti, in modo da poter fare




$enabled_cap_list = $user_agency->cap_gestiti



ottenendo un array di modelli CapGestiti

Fai la lista degli id




$enabled_cap_array = CHtml::listData($enabled_cap_list, "id","id");



ottiene un array (associativo ma non importa in questo caso), con gli id dei cap gestiti dall’agenzia dell’utente. Cioè sai esattamente quali cap l’utente può gestire. Ti prego, confermami che è quello che volevi ottenere o svengo.

Il passo successivo è modificare il data provider per filtrare i telegrammi in base agli id appena ottenuti

ok applico le tue indicazioni e ti dico :slight_smile:

public function relations()

{


	// NOTE: you may need to adjust the relation name and the related


	// class name for the relations automatically generated below.


	return array(


	'CapGestiti'=>array(self::MANY_MANY, 'CapGestiti', 'cap_gestiti_id'),


	);


}

Ti ricordo che le due tabelle sono colegate tra loro indirettamente attraverso la tabella "cap_agenzia" che riporta le due chiavi esterne delle tabelle cap_gestiti e agenzia.

Ho inserito anche l’ altra relation in User con la tabella agenzia…

questa e l’ actionIndex in Telegramma

/**

 * Lists all models.


 */


public function actionIndex()


{


	$dataProvider=new CActiveDataProvider('Telegramma');


	$this->render('index',array(


		'dataProvider'=>$dataProvider,


		$user_id = Yii::app()->user->id,


		$user = User::model()->findByPk($user_id),


		$user_agency = $user->agenzia,


		$enabled_cap_list = $user_agency->cap_gestiti,


		$enabled_cap_array = CHtml::listData($enabled_cap_list, "id","id"),


	));


}

Puo andar bene cosi??

ahyaaaa :muro

PHP warning

Invalid argument supplied for foreach()

$enabled_cap_array = CHtml::listData($enabled_cap_list, "id","id"),

Visto che sto lavorando :rolleyes: ti do un compito per casa.

Cerca di capire (cioè leggi la guida definitiva, googla, cerca sul forum e fai tante prove…) come si fa la relation many_many, perchè così NON va bene, difatti dato che NON trova nessun cap gestito, il listData scoppia perchè non ha un array… ad ogni modo studia e debugga un po’, sennò vengo li e scriviamo la app a quattro mani

INOLTRE: " $user_agency->cap_gestiti," deve dare per forza un errore php … miseria … la tua relazione si chiama CapGestiti, giusto? allora la usi come $user_agency->CapGestiti.

Esegui una per una le righe, col CVarDumper guarda che cosa ti danno e cerca di capire se ci sono errori php consultando gli error log.

Suggerimento…

Io ho utente <-- many – many --> agenzia

e la mia tabella associativa si chiama tbl_agenzia_utente, e contiene solo due campi: id_utente e id_agenzia




'agenzia' 	 => array(self::MANY_MANY, 'Agenzia', 'tbl_agenzia_utente(id_utente, id_agenzia)'),



uhm…la mia tabella che ingloba “cap_gestiti” e “agenzia” si chiama “cap_agenzia” come hai visto nello screenShot. Ora la relazione che tu mi chiedi MANY_MANY (ho capito l’ errore e ho provata a farla anche usando le 2 chiavi esterne di “agenzia” e “cap_gestiti” ma non la prende xche quando ho creato i model le tabelle non erano relazionate ("cito - L’agenzia deve avere una relazione many_many con cap_gestiti, in modo da poter fare

$enabled_cap_list = $user_agency->cap_gestiti)

Quindi ora provo a relazionarle tramite la chiave “agenzie_id” in maniera tale che alla creazione del cap, ci possa inserire anche l’ id dell Agenzia che lo gestisce e poi riprovo tutti i passaggi. Sono 42 gg che googloOoOo ma non ne cavo piede con questa cosa…ho seguito e riseguito tutti i 56 tutorial di Gustavo Salgado in spagnolo visto che lo capisco alla grande, ma ufff…vabbè riprovo e ti aggiorno. Grazie della disponibilità. :slight_smile:

fai una prova con dei dati inseriti a mano per ora

metti 3-4 quattro record in "CapGestiti" e registra 3-4 record "Agenzia"

quindi a manina inserisci nella tabella associativa, che NON deve avere un capo id, non servirebbe a nulla ma solo id_capgestiti e id_agenzia, i ‘link’ tra una e l’altra.

cosi credo la relazione possa andare:

return array(

	'cap_gestiti'=&gt;array(self::MANY_MANY, 'CapGestiti', 'cap_agenzia(cap_gestiti_id, agenzia_id)'),


	);

proseguo con il compito in classe :smiley: trovassi un compagno dal quale scopiazzare non sarebeb male :smiley: (rido per non tagliarmi le vene con la lametta :smiley: )

PS: anche io sono al lavoro quindi procedo come posso :smiley:

Ok corretti gli errori, ma ogni utente puo vedere tutti i telegrammi…questo non va bene … oddio sento che il mio ego mi sta sputando in faccia ;D

Quando dici “quindi a manina inserisci nella tabella associativa, che NON deve avere un capo id, non servirebbe a nulla ma solo id_capgestiti e id_agenzia, i ‘link’ tra una e l’altra” mi dici di inserire l’ id del cap e dell’ agenzia di destinazione giusto? Non è che sto continuando a fare caxxate e ad ammattirmi. Quando ti leggo …vedo molta facilità nel tuo parlare, come se stessi scrivendo la ricetta dell’ insalata con sale e olio ;D …sei un “Senior” io sono un “Baby” che deve apprendere!!! E fu cosi che iniziai a dare craniate agli spigoli del mio ufficio ;D

oddio continuo a sentirmi un’ imbecille…yii sta mettendo a dura prova la mia autostima

Intanto per non sapere cosa fare ti allego 2 screenshot.

1 della index "Telegrammi"

2 della admin "Telegrammi"

Continuo a leggere un po di docs…tanto per ora non ho gente in ufficio

Inserisco anche uno screenshot del database con la tabella cap_agenzie alla quale sono collegate la tabella cap_gestiti e agenzia.

I valori che vedi li ho inseiriti a manina come hai detto tu

2 - 1 -> 2 = CAP GESTITO DALL’ AGENZIA DI DESTINAZIONE ; 1 = AGENZIA LOGGATA CHE INVIA

1 - 3 -> 3 = CAP GESTITO DALL’ AGENZIA DI DESTINAZIONE ; 1 = AGENZIA LOGGATA CHE INVIA

Spero sia quello che intendevi tu!

Realtebo inizio a pensare di aver bastonato anche il tuo ego ;D

Dio fa che si connetta ;D sto brav’uomo !!!!

realtebo ti mando 100,00 € via fax va bene?? ;D

Scusa ti rompo ancora le scatole.

Ho fatto la relation MANY_MANY nel model Agenzia con cap_gestiti, in modo da poter fare $enabled_cap_list = $user_agency->cap_gestiti.

Questa è a relation ‘cap_gestiti’=>array(self::MANY_MANY, ‘CapGestiti’, ‘cap_agenzia(cap_gestiti_id, id_agenzia)’),

Ora andando a visualizzare la view Telegramma mi da un errore anche nell’ INNERJOIN. Ovviamente sbagllia la tabella del join perchè dice che non esiste neppure la colonna

CDbCommand ha riportato un errore nell’esecuzione della query SQL: SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘cap_gestiti_cap_gestiti.id_agenzia’ in ‘on clause’. The SQL statement executed was: SELECT cap_gestiti.id AS t1_c0, cap_gestiti.agenzia AS t1_c1, cap_gestiti.cap_gestiti AS t1_c2, cap_gestiti.comune AS t1_c3, cap_gestiti.provincia AS t1_c4, cap_gestiti.regione AS t1_c5 FROM cap_gestiti cap_gestiti INNER JOIN cap_agenzia cap_gestiti_cap_gestiti ON (cap_gestiti_cap_gestiti.cap_gestiti_id=:ypl0) AND (cap_gestiti.id=cap_gestiti_cap_gestiti.id_agenzia)

Dove stò toppando????