Yii Framework Forum: Questa è difficile (query) - Yii Framework Forum

Jump to content

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

Questa è difficile (query) query, mysql Rate Topic: -----

#1 User is offline   paskuale 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 314
  • Joined: 30-December 11
  • Location:Italy, Bari

Posted 25 February 2012 - 07:20 AM

Salve, questa volta non sò da dove iniziare... :(

1) Ho una tabella_A relazionata a tabella_B (1 a N)

2) Quando creo un nuovo record nella tabella_B, vorrei generare nello stesso istante un nuovo record anke sulla tabella_A ...

qualche prezioso consiglio ?

tnx :)
0

#2 User is offline   blacksheep 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 180
  • Joined: 31-December 11

Posted 25 February 2012 - 07:38 AM

quindi per ogni record di B hai un Record di A ?
So di non Sapere
0

#3 User is offline   paskuale 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 314
  • Joined: 30-December 11
  • Location:Italy, Bari

Posted 25 February 2012 - 08:05 AM

 blacksheep, on 25 February 2012 - 07:38 AM, said:

quindi per ogni record di B hai un Record di A ?


Bella domanda, da utente attento ;) !!

No solo per il primo caso/evento di inserimento (tabella_B ) poi il tutto si svolgerà sulla tabella_B
0

#4 User is offline   blacksheep 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 180
  • Joined: 31-December 11

Posted 25 February 2012 - 08:28 AM

sinceramente non ho capito bene, ti consiglio di guardare InnoDB Update e Delete.

ad esempio Delete => cascade, fa si che se si cancella un elemento dalla tabella A, vengono cancellati tutti gli elementi dalla tabella B correlati dalla chiave esterna. Forse puoi tirarci fuori qualcosa di utile per il tuo problema
So di non Sapere
0

#5 User is offline   paskuale 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 314
  • Joined: 30-December 11
  • Location:Italy, Bari

Posted 25 February 2012 - 08:42 AM

No ma il mio interesse non è per il delete ma bensì una procedura che all'inserimento nuovo record in tabella_B mi vada a inserire *magicamente* nella tabella_A un nuovo rigo (solo al primo inserimento di tabella_B )

Un stored procedure può tornarmi utile ? O Yii me ne farebbe fare a meno ?

tnx
0

#6 User is offline   paskuale 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 314
  • Joined: 30-December 11
  • Location:Italy, Bari

Posted 27 February 2012 - 04:41 AM

Ho due tabelle (CAMION e PACCHI) vorrei far si che all'inserimento di un nuovo PACCO venga automaticam inserito un nuovo id alla tabella dei CAMION.... si può :( ?
0

#7 User is online   sensorario 

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

Posted 27 February 2012 - 09:20 AM

Niente di più semplice:

$pacco = new Pacco();
$pacco->peso = 33;
$pacco->save();

$camion = new Camion();
$camion->caricaPacco($pacco);

0

#8 User is offline   proid 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 11-February 11
  • Location:Italy - Sassari

Posted 27 February 2012 - 09:22 AM

A parte che un nuovo pacco non vuol dire un nuovo camion.... :) comunque .....
secondo me dovresti creare un nuovo record CAMION nel controller del PACCO nella action create e update.
Prima di model->save() del pacco controlla se ha l'id istanziato... se non è ancora assegnato vuol dire che è un nuovo record e in quel caso crei un nuovo model di CAMION e lo salvi.
Nella action delete invece, prima di eliminate il pacco, ricerchi il camion e se non associato ad altri pacchi elimini il camion.
if(Yii::app()->user->username=='proid') echo "Hello me!"; else echo "Proid";
0

#9 User is online   sensorario 

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

Posted 27 February 2012 - 09:25 AM

proid, era ovvio quello che volevo dire. Provo a scomporlo. Ovviamente ci vuole un ciclo, ovviamente no: non sto inserendo sempre lo stesso pacco nel camion.


Creare pacchi
$pacco = new Pacco();
$pacco->peso = 33;
$pacco->save();


Aggiungere pacchi al camion
$camion = new Camion();
$camion->caricaPacco($pacco);
$camion->caricaPacco($pacco);
$camion->caricaPacco($pacco);
$camion->caricaPacco($pacco);
$camion->caricaPacco($pacco);
$camion->save();

0

#10 User is offline   proid 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 11-February 11
  • Location:Italy - Sassari

Posted 27 February 2012 - 09:54 AM

scusa sensorario non avevo la tua replica quando ho scritto, rispondevo a paskuale... sicuramente stavamo scrivendo contemporaneamente nel forum!
Appunto è come scrivi tu ma avevo capito che paskuale voleva inserire un record CAMION ad ogni nuovo record PACCO, cioè volava fare una relazione 1:1 invece che 1:molti ... mi sembrava sbagliato
if(Yii::app()->user->username=='proid') echo "Hello me!"; else echo "Proid";
0

#11 User is offline   paskuale 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 314
  • Joined: 30-December 11
  • Location:Italy, Bari

Posted 27 February 2012 - 10:48 AM

No in realtà la relazione tra CAMION --> Pacco è 1->N solo che mi serviva autogenrare un camion (progressivo) al primo pacco creato dall'utente. Tutto qui, ed effettivamente nell'attesa della vs preziosa risposta :) son finito anch'io a modificare il codice nel controller/create solo che per sicurezza ho aggiunto un rollback nel caso si verifichino degli errori non vorrei ritrovarmi camion vuoti vhe brancolano nel buio :lol:

(nel PaccoController, action:create)
$trans = Yii::app()->db->beginTransaction();
		 $model=new Pacco;
		 $modelcc = new Camion;
if(isset($_POST['Pacco']))
		{
			$model->attributes=$_POST['Pacco'];
			try {
				$modelcc->save(false);
				
				$model->attributes=$_POST['Pacco'];
				$model->cc_id_fk=$modelcc->cc_id;
	            		$model->save(false); 
	            		$trans->commit();
				
				$this->redirect(array('Pacco/view','id'=>$modelcc->fk_id));
	            	        			
        		} catch (Exception $e) {
                		
				$trans->rollback();
                		throw $e;	
        		}
		}

0

#12 User is offline   emafer 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 174
  • Joined: 23-February 12
  • Location:Amandola

Posted 29 February 2012 - 04:59 AM

Ciao a tutti,
volendo, se è una cosa automatica e valida per ogni inserimento, potresti usare un trigger MYSQL del genere:
CREATE TRIGGER pacco_Trigger
AFTER insert ON pacco
FOR EACH ROW
    BEGIN
    insert into camion values(new.id,new.first_name,
    new.last_name,new.start_date,new.end_date,
    new.city,new.description,curtime());
    END


... vedi un po'!
1

#13 User is online   sensorario 

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

Posted 29 February 2012 - 03:49 PM

Lo sconsiglio caldamente: usare i trigger significherebbe dipendere dal database. Quello che invece si può fare, è una gestione dell'evento. Yii, è uno dei pochi framework che ha l'EDP. Ovvero la programmazione orientata agli eventi. E' possibile creare un evento onCamionCreation, per poi richiamarlo al momento opportuno. In quel momento, è quindi possibile fare tutte le operazioni del caso.

PS. L'idea del trigger è ottima e decisamente più performante della mia soluzione. Se non hai in previsione di cambiare db, te la consiglio anche io.
1

#14 User is offline   paskuale 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 314
  • Joined: 30-December 11
  • Location:Italy, Bari

Posted 29 February 2012 - 07:33 PM

 sensorario, on 29 February 2012 - 03:49 PM, said:

Lo sconsiglio caldamente: usare i trigger significherebbe dipendere dal database. Quello che invece si può fare, è una gestione dell'evento. Yii, è uno dei pochi framework che ha l'EDP. Ovvero la programmazione orientata agli eventi. E' possibile creare un evento onCamionCreation, per poi richiamarlo al momento opportuno. In quel momento, è quindi possibile fare tutte le operazioni del caso.

PS. L'idea del trigger è ottima e decisamente più performante della mia soluzione. Se non hai in previsione di cambiare db, te la consiglio anche io.


Innanzitutto ringrazio emafer x i trigger che nn avevo mai visto su mysql, poi ringrazio pure quel gran simpaticone di senso che nun a capit che qui (oltre alla preziosa teoria) volemo i fatti ?!?! Uno stralcio di codice di come gestisce l'evento yii ?

grassie ;D
0

#15 User is online   sensorario 

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

Posted 29 February 2012 - 11:15 PM

Faccio un wiki in italiano appena ho tempo.
0

#16 User is offline   proid 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 11-February 11
  • Location:Italy - Sassari

Posted 01 March 2012 - 03:37 AM

 paskuale, on 29 February 2012 - 07:33 PM, said:

Innanzitutto ringrazio emafer x i trigger che nn avevo mai visto su mysql, poi ringrazio pure quel gran simpaticone di senso che nun a capit che qui (oltre alla preziosa teoria) volemo i fatti ?!?! Uno stralcio di codice di come gestisce l'evento yii ?

grassie ;D


Dai almeno sensorario ti ha indicato la strada... è sempre meglio che lasciarti solo con le tue domande :)
A me non piace mettere logica nel database (trigger), opinione personale comunque, preferisco gestire la cosa lato applicazione anche perchè se il db si INCAZZA per qualche violazione (es. vincoli di integrità o altro) ti esce un bell'errore a video... tanto vale gestire la cosa lato applicazione così puoi prevenire anche le eccezioni lato DB.
Poi se cambi dbms ..... riadatta li codice lato DB e buon divertimento
if(Yii::app()->user->username=='proid') echo "Hello me!"; else echo "Proid";
0

#17 User is offline   paskuale 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 314
  • Joined: 30-December 11
  • Location:Italy, Bari

Posted 01 March 2012 - 07:32 AM

 proid, on 01 March 2012 - 03:37 AM, said:

Dai almeno sensorario ti ha indicato la strada...


B) in realtà mi son permesso solo perchè sensorario è uno dei miti qui sul forum :lol: và davvero forte, ha una velocità di apprendimento molto alta!! Solo che in passato ho istigato agli esempi perchè molti come me non hanno la stessa rapidità di senso e dovrebbero recuperare terreno B)
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