Yii Framework Forum: Tabella Di Stato Con Relazione Many_Many: Come Visulizzare Il Timestamp Relativo? - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Tabella Di Stato Con Relazione Many_Many: Come Visulizzare Il Timestamp Relativo? problema nel legger un campo Rate Topic: -----

#1 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 328
  • Joined: 10-April 12

Posted 11 October 2012 - 09:46 AM

ho una tabella di stato composta da id,progetto_id,stato_id,createtime

nel model progetto ho impostato la relazione in questo modo:
'stato'=>array(self::MANY_MANY, 'StatoProgetto', 'tbl_stato_progetto(progetto_id, stato_id)','order'=>'createtime ASC'),


la relazione funziona, vedo correttamente i diversi stati di Progetto vorrei però poter stampare il campo createtime.

io per testare la relazione mi son scritto:
foreach($model->stato as $stato)
$stato->stato;

il problema è che in questa maniera non riesco a leggere createtime, come fare?

Grazie.
0

#2 User is offline   roccodelux 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 27
  • Joined: 08-September 12

Posted 11 October 2012 - 10:25 AM

View Postst4nny, on 11 October 2012 - 09:46 AM, said:

ho una tabella di stato composta da id,progetto_id,stato_id,createtime

nel model progetto ho impostato la relazione in questo modo:
'stato'=>array(self::MANY_MANY, 'StatoProgetto', 'tbl_stato_progetto(progetto_id, stato_id)','order'=>'createtime ASC'),


la relazione funziona, vedo correttamente i diversi stati di Progetto vorrei però poter stampare il campo createtime.

io per testare la relazione mi son scritto:
foreach($model->stato as $stato)
$stato->stato;

il problema è che in questa maniera non riesco a leggere createtime, come fare?

Grazie.


Ti consiglio di dare una lettura alla parte finale del mio post: Relazioni Many Many
0

#3 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 328
  • Joined: 10-April 12

Posted 11 October 2012 - 04:49 PM

non vedo dove trovo una soluzione alla mia domanda.
nelle tue tabelle con many_many ci sono solo le chiavi esterne non ci sono altri campi.
0

#4 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,986
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 11 October 2012 - 08:18 PM

Hai una relazione many to many, quindi
    foreach($model->stato as $stato) {
        $stato->stato;
    }

la variabile dentro al foreach sarà un array di riferimenti alla tabella più esterna. Devi fare un altro foreach interno.
0

#5 User is offline   roccodelux 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 27
  • Joined: 08-September 12

Posted 12 October 2012 - 12:18 AM

View Postst4nny, on 11 October 2012 - 04:49 PM, said:

non vedo dove trovo una soluzione alla mia domanda.
nelle tue tabelle con many_many ci sono solo le chiavi esterne non ci sono altri campi.

Forse hai letto male
perché ci sono altri attributi e cmq sono due foreach innestati.
Se hai ancora problemi posta la relazione delle tbl in modo che riesca a capire meglio il tuo problema.
0

#6 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 328
  • Joined: 10-April 12

Posted 12 October 2012 - 02:50 AM

allora riformulo la richiesta:

@roccodelux:
la tua many_many ha solo 2 campi(utenti_permessi) o 3 campi(tbl_ categoria prodotti con l'id), non ha altri attributi e non vedo del codice che li tira fuori dalla tabelle interessate.

@sensorario:
il problema è proprio quello, io non voglio riferirmi alla tabella più esterna ma alla tabella che ha
la relazione many_many: ogni volta che cambio stato mi salvo un timestamp mi interessa stamparlo in qualche maniera. è possibile solamente settando la relazione come indicato nel primo post nel model Progetto?

'stato'=>array(self::MANY_MANY, 'StatoProgetto', 'tbl_stato_progetto(progetto_id, stato_id)','order'=>'createtime ASC'),


la tabella tbl_stato_progetto (many_many) ha dentro di se progetto_id,stato_id,timestamp
io voglio stampare lo STATO e il timestamp, come? lo stato lo stampo già, come faccio a stampare il timestamp?
0

#7 User is offline   roccodelux 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 27
  • Joined: 08-September 12

Posted 12 October 2012 - 05:33 AM

Nel model metti una relazione has-many ed hai risolto.

Partiamo dal mio esempio
nella tbl utenti_permessi ho aggiunto l'attributo vari

Nel model Utenti inserisco la relazione:

	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(
				'permessis' => array(self::MANY_MANY, 'Permessi', 'utenti_permessi(utenti_id, permessi_id)'),
				//'services' => array(self::MANY_MANY, 'Service', 'LibraryService(libraryID, serviceID)'),
				'utentipermessis'=>array(self::HAS_MANY, 'utenti_permessi', 'utenti_id'),
		);
	}




Nell'action:


public function actionHasMany()
	{
		$utenti=Utenti::model()->findAll();
		
		foreach($utenti as $utente)
		{
		
			echo $utente->nome . " sono associati n= " . count($utente->utentipermessis) . " Vari. Essi sono :<br />";
			//echo $utente->utentipermessis
			
			foreach($utente->utentipermessis as $permesso)
			{
				echo $permesso->vari . "<br />";
			}
			echo "<br />";
		
		}
		
	}




0

#8 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 328
  • Joined: 10-April 12

Posted 14 October 2012 - 05:20 AM

ragazzi io ancora non ho risolto il mio problema.
nessuno di voi ha avuto l'esigenza di avere una many_many con timestamp?

la tabella è così: id | progetto_id | stato_id | createtime

è una tipica tabella di controllo degli stati.. lo stato più recente è quello attuale.

sono nella situazione in cui vorrei visualizzare in una gridview: TIPO STATO | DATA
e far vedere i vari stati in cui è passato il progetto.

al momento ho impostato la relazione come segue:
'stato'=>array(self::MANY_MANY, 'StatoProgetto', 'tbl_stato_progetto(progetto_id, stato_id)','order'=>'createtime ASC'),


la relazione funziona correttamente ma in questa maniera con il foreach non riesco a visualizzare il timestamp della data di creazione.

con questo codice:
foreach($model->stato as $stato) {
        $stato->stato;
        //$stato->createtime; (è nullo)
        //anche con il foreach è nullo
    }


la tbl_stato ha: id | stato (varchar)
quindi ci sta che createtime sia nullo.. perchè a quel livello non esiste.

come faccio a risolvere?
0

#9 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,986
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 14 October 2012 - 07:21 AM

Domanda: ma nel database che valore hai?


PS. C'è una ragione per la quale usi andare a capo anziché usare la virgola, oppure non inizi le frasi con la maiuscola?
0

#10 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 328
  • Joined: 10-April 12

Posted 15 October 2012 - 03:07 AM

Re al PS: No. Non c'è nessuna ragione. :D

Ritornando a noi:
Tabella dei Tipo di Stato
CREATE TABLE tbl_stato
(
  id serial NOT NULL,
  stato character varying(200),
  CONSTRAINT pk_tbl_stato_id PRIMARY KEY (id )
)


Tabella degli stati dei progetti:
CREATE TABLE tbl_stato_progetto
(
  id serial NOT NULL,
  progetto_id integer NOT NULL,
  stato_id integer NOT NULL,
  createtime integer NOT NULL,
  CONSTRAINT pk_id PRIMARY KEY (id ),
  CONSTRAINT tbl_stato_progetto_progetto_id_fk_tbl_progetto_id FOREIGN KEY (progetto_id)
      REFERENCES tbl_progetto (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT tbl_stato_progetto_stato_id_fk_tbl_stato_id FOREIGN KEY (stato_id)
      REFERENCES tbl_stato (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)


In questa tabella degli stati, ho fatto diverse INSERT di prova:
COPY tbl_stato_progetto (id, progetto_id, stato_id, createtime) FROM stdin;
1	2	0	1261146094
3	2	1	1341495925
2	2	6	1341302442
\.


L'sql riportato viene da un pg_dump nel caso non tornasse familiare qualcosa.
Penso che ormai la richiesta sia chiara, io vorrei poter stampare in una Gridview:
Tipo di Stato associato a stato_id (cosa che già faccio con la MANY::MANY impostata),
e createtime che non riesco ancora a leggere impostando solo la relazione postata:
'stato'=>array(self::MANY_MANY, 'StatoProgetto', 'tbl_stato_progetto(progetto_id, stato_id)','order'=>'createtime ASC'),


---------
Per ora ho impostato una HAS::MANY, e una HAS::ONE per recuperare il singolo record che rappresenta l'ultimo stato salvato.
'stato'=>array(self::HAS_MANY, 'StatoProgetto', 'progetto_id','order'=>'createtime DESC'),
'stato_attuale'=>array(self::HAS_ONE, 'StatoProgetto', 'progetto_id','order'=>'createtime DESC'),


non era quello che mi ero prefissato, ma comunque funziona. Voi che dite?
0

#11 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,986
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 15 October 2012 - 05:11 PM

Se funziona va bene.
0

#12 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

Posted 16 October 2012 - 01:06 AM

View Postsensorario, on 15 October 2012 - 05:11 PM, said:

Se funziona va bene.

Grande Sensorario, mi piace la tua filosofia!

Io non sono un gran fan delle many many, preferisco fare una has many + belongs to per ottenere il risultato, se ti secca il fatto di fare troppe query usa with:

$criteria->with('stato'=>array('with'=>'nomeStato'));


In questa maniera hai una query con 2 join, esattamente la stessa cosa che avresti con la many many, la differenza e' che nella select hai anche il tuo timestamp.
0

#13 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 328
  • Joined: 10-April 12

Posted 16 October 2012 - 02:51 AM

Ho impostato come dicevate un has many + belongs.
Le mie domande continue e il tentativo di up, erano solo per capire
se fosse un mio limite nel capire la documentazione, o un limite della funzionalità.

Grazie a tutti comunque per il supporto.
0

#14 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,986
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 16 October 2012 - 07:54 AM

La mia filosofia è "prima lo faccio funzionare", poi se c'è modo, lo faccio funzionare meglio. Devo creare prima valore per il cliente che per me. Uso Yii anche per questo.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users