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
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 ?
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ò ?
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.
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();
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
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
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
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 ?
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
in realtà mi son permesso solo perchè sensorario è uno dei miti qui sul forum 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