[Yii 1] Allineamento Orizzontale Dei Risultati In Una Cdetailview

personalmente ti consiglio ti togliere il superfluo appena te ne accordi.

usa git, così non devi fare backup di nulla …

che bello, grazie al sql ho capito miliardi di cose




FROM `telegramma` `t`  

LEFT OUTER JOIN `cap` `Cap` 

    ON (`t`.`cap_id`=`Cap`.`id`)  

LEFT OUTER JOIN `user` `utenti` 

    ON (`Cap`.`agenzia_id`=`utenti`.`id`) 



Quindi

Telegramma.cap_id --> Cap.id

e

Cap.agenzia_id --> Utenti.id

Ma che diavolo vuol dire?

Che l’id agenzia in tabella CAP punta in realtà ad un id utente ?!?!

Perchè !? Non doveva puntare ad una agenzia ?

Si e così, mi stavo incasinando il cervello con CapAgenzia. Nella index telegramma grazie a




 return array(

       

        'Cap'=>array(self::BELONGS_TO, 'Cap', 'cap_id'),       

        'utenti' => array(self::HAS_MANY, 'User', array('agenzia_id','agenzia_id'), 'through' => 'Cap', 'together' => true),

        );



capisce che a ogni cap è lagato un user che poi ovviamente è legato a una agenzia.

Ho eliminato la relazione CapAgenzia mi stava creando solo confusione…cosi non mi dimentico un’ altra volta di toglierla. La implementerò a tempo debito, soprattutto quando avrò capito qualcosa in più su yii.

Wow, ho trovato una relation che non riesco proprio a decifrare…

Quindi da telegramma otteniamo 1 e un solo cap mittente, confermi?

da cap otteniamo 1 e un solo user, confermi?

da user otteniamo una e una sola agenzia, confermi?

Se è così siamo quasi a cavallo

Tutto giusto. Specifico solo questo…un ’ agenzia ha piu utenti ma ovviamente ogni user loggato corrisponderà sempre all’ agenzia di appartenenza.

PS: tu dici siamo a cavallo? Io con tutto ciò che abbiamo scritto, codice, prove etc ho il cervello in panne ;D

siamo a cavallo, e te lo puoi dimostrare a te stesso facendo i dump, progressivamente di

$telegramma->cap

$telegramma->cap->utente

$telegramma->cap->utente->agenzia

$telegramma->cap->utente->agenzia->nome_completo

facendo l’echo dell’ultimo dovresti avere il nome dell’agenzia

sia che metto




<?php echo "Agenzia mittente: ";

echo $telegramma->cap->utente->agenzia->nome_completo; 

?>



o che metta




<?php echo "Agenzia mittente: ";

echo $telegramma->cap->user->agenzia->nome_completo; 

?>



Affianco a Agenzia Mittente non appare nulla e in più mi dice

La proprietà "Telegramma"."agenzia" non è definita.

Quindi credo che debba cmq inserire la relation in Telegramma. Ora provo e ti faccio sapere subito

niente anche inserendo la relation in Telegramma




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



mi dice null

PS: anche facendoli progressivi…già dal primo dump mi dice null

MA NO !

Assolutamente, …

il messaggio "La proprietà "Telegramma"."agenzia" non è definita." non ha alcun senso, se hai scritto quello che hai postato, per cui controlla quanto hai scritto.

E NO, non serve la relazione tra agenzia e telegramma, non fare cose a caso, se le tabelle non sono relazionate, NON si fa nessuna relation.

Prova una alla volta questi, e vedi quando scoppia




echo $telegramma->cap->id;


echo $telegramma->cap->utente->id;


echo $telegramma->cap->utente->agenzia->id;



Scusa il tempo di reply, ho mangiato … :)

Bentornato e buona digestione ;D

Ti avevo detto che il mio cervello stava andando in panne e comunque ho messo la relations perchè sennò con il




CVarDumper::dump($telegramma->agenzia,2,true);



non avendo la relations mi scriveva come detto prima … La proprietà "Telegramma"."agenzia" non è definita.

Per quanto riguarda il tuo codice, non scoppia mai xchè ottengo sempre un bel null e a fianco di Agenzia mittente: resta vuoto.

L’ unico modo con il quale riesco a ottenere l’ id dell’ agenzia mittente è con questo codice:




<?php

echo "Agenzia mittente: ";

echo $model->cap->agenzia_id;

?>



che mi restituisce:

Agenzia mittente: 1 . 1 è l’ id dell’ agenzia mittente.

L’ unica cosa che sta scoppiando è la mia testa adesso ;D

Ora per tagliare la testa al toro (se è fattibile) si possono creare 2 campi nella tabella telegramma:

ag_mitt

ag_dest

che si riempiono automaticamente in base alla scelta dei due cap (mittente e destinatario) selezionati nel form, durante la creazione del telegramma? . cosi poi basta che richiamo i due campi nella vista attraverso


 echo $model->nomecampo 

et voilà che magicamente appariranno i nomi dell’ agenzia mittente e di quella di destino. <_< -> pensieroso!!!

Ovviamente togli




CVarDumper::dump($telegramma->agenzia,2,true);




era li per fare del debug, quando non serve più, si toglie, subito.




<?php

echo "Agenzia mittente: ";

echo $model->cap->agenzia_id;

?>



Questo codice ti 1, ma non è l’id dell’agenzia… credimi, è l’id utente. e lo dico per via di come era fatta la query sql postata prima. Dimmi, ma sei completamente a digiugno di sql, vero?

la soluzione dei due campi aggiutivi, ovviamente, funziona, ma stai lasciando un sacco di sporco sia nel db che nel codice, le relation NON fanno quello che ti aspetti e quindi tutto questo è … dannoso …

vedi te, il software è tuo.

Quindi tutte le relazioni sarebbero da rifare giusto? Questo è il tuo consiglio? <_< Per quanto riguarda sql, ma anche il php, non lo maneggiavo da circa un annetto e mezzo, da quando creai un tracking per spedizioni…ma in php puro. Poi ora ad un paio di amici è saltata in mente questa specie di piattaforma e uno di loro mi ha consigliato di provare ad usare yii, che fino a un mese e mezzo fa non sapevo neppure che esistesse. Ma neppure lui sa cos’è perchè fa il grafico ;D e non so neppure come gli sia scappato fuori yii su google. Cosi ho iniziato a leggere guide, guardare tutorial,e leggere forum. Ad oggi e sono 2 mesi…ho difficoltà a capire yii. E’ vero che è php ma funziona in modo diverso, con classi funzioni etc etc. Io tutto quello che sò a livello di programmazione lo sò perchè mi sono appassionato leggendo sul web anni fà. A dire il vero ho sempre creato siti web più che altro…per me per amici e qualcuno per lavoro (hobby a pagamento diciamo). Da quando sono nati cms come wordpress joomla etc iniziai ad usarli e ad adattarli alle mie esigenze. Sai bene che sono molto semplici da gestire e che anche chi non è molto pratico può (abbastanza facilmente) modificarne i codici. Invece per quanto riguarda questa piattaforma se fosse per uso personale…sarebbe abbastanza uno scherzo crearla. Ma loro vorrebbero farla funzionare su una rete di agenzie e allora e tutto molto più complicato per chi, come me, si è avviccinato adesso a yii.

Quindi tu mi stai praticamente dicendo che tutto ciò che ho fatto è da cestinare e che devo riniziare da zero? Se si come procederesti? Già avevamo parlato con te di questa cosa…poi mi sei “morto” per un bel po di tempo e allora mi sono fatto aiutare da un’ altro utente molto cortese e gentile e che a dire il vero mi ha stupito perchè dopo che scrivevo per giorni lui mi ha risolto il problema in 1 gg e mezzo :) . Ora con la tabella intermedia tra cap e agenzia, ossia cap_agenzia, se riuscissi a sviluppare una relazione valida potrei ricavare quei dati? Oppure a questo punto conviene tenere tutto com’è e creare quei due campi che ti dicevo? Ovviamente ripulendo il codice dalle relation che non utilizzo e tenendo solo la relazione che fa capire a yii cosa mostrare in index “Telegramma” in base all’ utente connesso che è legato al cap e quindi all’ agenzia. Se partissi con la seconda opzione come poso fare per fare un autocomplete in quei 2 campi che creo???

Comunque sta cosa mi sconforta…quando penso di aver capito una cosa nuova…trovo sempre una persona che mi fa capire che non capito un benemerito c******o = cavolo!! Ma vabbè dicono che il tempo che perdi a studiacchiare yii lo recuperi più in la quando inizi a sviluppare…già magari quando ho 60 anni allora inizierò a guadagnare tempo…ma ci saranno problemi di altro tipo, come l’ artrosi, la vista, il cervello che si incasina da solo…insomma un bel problema veramente. ;D -> meglio riderci sopra.

Ora sparo un’ altra stronzata, se riesco a entrare nella tabella user visto che ciò che stò viasualizzando adesso tramite


 $model->cap->agenzia_id 

è l’ id utente, perchè da quella tabella non riesco a prelevare l’ agenzia_id (che esiste come campo nella tabella user)e “trasformarlo” in nome completo come faccio nella view index nel model Agenzia? Sempre colpa delle relations giusto?

Comunque sia, sto pensando a una cosa. Visto che questa app avrà anche un’ interfaccia web attraverso la quale un’ utente si registra e invia il suo telegramma credo che eviterò la stampa dei nomi delle agenzie. Alla fine può essere utile nella “piattaforma” che useranno le agenzie della rete…ma per quanto riguarda l’ interfaccia web non serve a niente, visto che poi verrà consegnato da un’ agenzia o da poste italiane. Mi ci stò solo mangiando il cervello con sta cosa…meglio che la lascio perdere e rifletto bene insieme agli altri sulla stampa del telegramma senza quei campi. Sarebbero serviti se la piattaforma venisse utilizzata solo dalle agenzie ma se ha un’ interfaccia web, per permettere l’ invio dei telegrammi online (come avevo pensato di fare) questi dati secondo me non servono a nulla. E poi ad dirla tutta…riniziare da zero sarebbe troppo deprimente :-X

ok, ora che ti sei sfogato… niente panico !

visto che $model->cap->agenzia è in realtà uno user … vuol dire che la relation agenzia dentro a cap deve essere rinominata come utente.

a quel punto avrai

$model->cap->utente

bene

da li puoi fare

$model->cap->utente->agenzia

e stampare il nome completo

$model->cap->utente->agenzia->nome_completo

Prova

Ciao realtebo e scusa se oggi nn sono stato presente…ho finito di lavorare alle 20:00. Finisco di cenare e provo a fare cio che scrivi. Come sempre Grazie!!!

Eccomi…allora:

Rinomata la relation in Cap cosi


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

Prova del codice


<?php

echo "Agenzia mittente: ";

echo $model->cap->utente->agenzia->nome_completo ;?>

mi restituisce:




CException


La proprietà "Cap"."utente" non è definita.