Ok ho modificato e ora il campo si popola…ma continuo a poter vedere e esitare il telegramma con qualsiasi utente loggato.
Ok ho modificato e ora il campo si popola…ma continuo a poter vedere e esitare il telegramma con qualsiasi utente loggato.
Ufff qualcuno sa spiegarmi dove sbaglio perfavore ;(
Quando avete iniziato con yii vi è mai venuta la voglia di mollare
Cerca di fare un pò di debugging e di controllare.
Riporta nuovamente i model modificati.
Ok a livello di errori non ne ricevo neppure uno. Ho letto e riletto le tue indicazioni e sono ripartito da zero più volte. Ho rifatto anche il database e al posto di inserire manualmente il campo id_cap e id_agenzia, ho fatto si che venisse inserito tramite le relation, creando il database con DBDesigner e quindi che quesi campi fossero INTEGER. Non ha funzionato neppure cosi…quindi ho rifatto il database inserendo quei campi nelle tabelle manualmente come campi VARCHAR
I model con le relazioni sono questi:
User:
public function relations()
{
return array(
'agenzia'=>array(self::BELONGS_TO, 'Agenzia', 'id_agenzia'),
'telegramma'=>array(self::HAS_MANY,'Telegramma',array('id_cap'=>'id_cap'),'through'=>'agenzia'),
);
}
Agenzia:
public function relations()
{
return array(
'capAgenzia' => array(self::HAS_MANY, 'CapAgenzia', 'id_agenzia'),
'cap' => array(self::HAS_MANY, 'Cap', array('id_cap','id'), 'through' => 'CapAgenzia'),
);
}
Telegramma:
public function relations()
{
return array(
'cap'=>array(self::BELONGS_TO, 'Cap', 'id_cap'),
);
}
Nel Controller Telegramma all’ actionIndex ho questo:
public function actionIndex()
{
$dataProvider=new CActiveDataProvider('Telegramma');
$this->render('index',array(
'dataProvider'=>$dataProvider,));
$utente = User::model()->findByPk( Yii::app()->user->id );
$telegramma = $utente->telegramma;
}
Ma niente da fare, ogni utente vede e modifica qualsiasi telegramma. Ovvio non è colpa del tuo procedimento sicuramente…ma del mio essere novizio e forse poco porato per yii. Forse è il caso che mi scrivo le mie belle query con php puro come facevo una volta quando mi creai anche un sistema di tracking per spedizioni…oh my good!!! Dicono che il tempo che "perdi" per imparare ad usare yii lo recuperi quando hai appreso in fase di progettazione…credo sia vero…ma vorrei poterlo conmprovare io stesso al più presto.
public function actionIndex()
{
$dataProvider=new CActiveDataProvider('Telegramma');
$this->render('index',array(
'dataProvider'=>$dataProvider,));
$utente = User::model()->findByPk( Yii::app()->user->id );
$telegramma = $utente->telegramma;
}
Qui c’è un errore.
Perchè: prima istanzi $dataProvider, poi generi l’output della vista (e quindi ormai il browser ha ricevuto l’html della pagina) e poi assegni l’utente e di conseguenza i telegrammi (e a questo punto fare queste 2 operazioni non serve a nulla, visto che l’utente ha già ricevuto l’output).
Hai 2 strade:
Ad occhio dovrebbe essere una scrittura del tipo:
telegrammi
public function relations()
{
return array(
'cap'=>array(self::BELONGS_TO, 'Cap', 'id_cap'),
'capAgenzia' => array(self::HAS_MANY, 'CapAgenzia', array('id','id_cap'), 'through' => 'Cap'),
);
}
Di conseguenza, avendo l’utente l’associazione con l’agenzia (se non ricordo male), puoi scrivere:
$cr = new CDbCriteria();
$cr->with = array('capAgenzia' => array('condition' => 'capAgenzia.id_agenzia = '.$user->id_agenzia) );
$arrTelegrammi = Telegrammi::model()->findAll($cr);
$utente->telegrammi;
A te le scelta.
Comunque qui non si tratta di Yii (che peraltro è uno dei più intuitivi e meno macchinosi in circolazione), ma andrebbero
consolidate le basi. E mi raccomando, per gli ID usa sempre numeri e non VARCHAR (a meno di sapere cosa stai facendo) !!!
Eccomi, mi hai letteralmente confermato ciò che pensavo, ma, essendo un novello e avendo paura di dire qualche caxxata, ho preferito tacere. Il fatto è che, come dici tu, bisogna che io ci dia giù di studio e avevo pensato al fatto che sbagliavo sul DataProvider. Ho provato a toglierlo e ad abilitare i criteria, ma (ripeto) essendo novizio non riuscivo a fare ciò che volevo (nonostante abbia imbottito il mio cervello di letture e letture) e non volevo dirti qualche caxxata colossale. Allora ho preferito stare zitto e farti vedere i model per aiutarmi a capire. Per quanto riguarda l’ id uso sempre INT…ma iniziavo ad avere i miei dubbi…come detto yii sta mettendo a dura prova la mia autostima. Appena ho tempo testo il tutto seguendo le tue indicazioni e vedo che succede. Grazie ancora Fabrizio
Credo che sia sbagliata la query qui ‘CapAgenzia.agenzia_id =’ .$user->agenzia_id) infatti mi da un errore di sintassi sql che credo dipenda dal fatto che (‘CapAgenzia.agenzia_id =’) il simbolo = sia racchiuso dentro le ’ ‘. Infatti alla fine della query quando arriva a WHERE (CapAgenzia.agenzia_id =) secondo me non capisce a cosa sia uguale e spara l’ errore di sintassi.
O forse sono sbagliati i nomi dei campi nelle tabelle e non li trova. Ricontrollo il tutto e vedo che diamine ho combinato con i nomi dei campi…poi stasera ti faccio sapere. Anzi rifaccio tutto il procedimento ricreando completamente il database, tutti i controller e i model e riscrivendo tutte le relations…inizio a sclerare!!!
Niente da fare … mi continua a dare errore nella query. Ho rifatto tutto da zero. Credo sia il caso di gettare le armi e alzare bandiera bianca. Mi inizio a sentire una m********a. Grazie a Fabrizio e a realtebo per avermi aiutato.
Se getti la spugna proprio ora, sbagli.
Cerca di fare debugging e procedere per gradi.
Ti ho mandato in privato un messaggio per contattarmi direttamente.
Fabrizio…NON posso darti torto…ma è sconfortante, ho abilitato la visualizzare degli errori e se tolgo il criterio tutto gira…ovviamente senza il filtro che mi serve. Non capisco perchè non va a buon fine la query. Ho provato a rifare tutto da capo…ho provato a modificare i campi che legano le tabelle, a chiamare tutti i campi nello stesso modo, ossia cap_id e agenzie_id mentre prima differenziavo cap_id e agenzia_id perchè li usavo solo nella tabella (di appoggio) cap_agenzia - che lega le tabelle cap e agenzia insieme, mentre nelle altre usavo id_cap e id_agenzia. Ma neppure questa soluzione ha funzionato. Che altro debugging posso fare? Creo e ricreo e ottengo sempre lo stesso risultato. Allego uno screenshot del database, se vuoi vederlo, forse sto sbagliando qualcosa li.Ho rifatto tutti i model e se vuoi ti incollo tutte le relazioni che ho riscritto. Più di cosi, non so più dove andare a sbattere la testa. Credo di aver un momento di sconforto…non so tu…ma io quello che ho imparato su php, html, mysql, javascript, etc l’ ho appreso tutto da autodidatta leggendo in giro per il web…se avessi studiato forse…oggi sarebbe diverso. Riprovo domani se ho tempo al lavoro, sennò domani sera se mia figlia mi lascia qualche attimo di libertà!!! Spero la notte mi porti consiglio…come si suol dire.