Come Operare Sul Db?
#1
Posted 09 October 2012 - 09:13 AM
da poco sto utilizzando Yii e sono qui a chiedervi un consiglio su come operare sul mio database mysql.
Ho una tabella ARTICOLI con tutte le info (prezzo, codice, descrizione,...).
Nella tabella MAGESE ho invece informazioni sulla disponibilità in magazzino (giacenza, prenotati, venduti,...).
Ho creato Model, Controller e View solo per gli ARTICOLI: come faccio ora a leggere le info della tabella MAGESE nella view di un singolo articolo? Effettuo una query semplicemente con php ?
Grazie!
Franco
#2
Posted 09 October 2012 - 09:15 AM
Hai già stabilito le relation nei due model ?
Ricordalo quando fai il debug
#4
Posted 09 October 2012 - 09:26 AM
se si, il passo dopo è capire le relazioni. Questo articolo ti potrebbe essere utilissimo
in caso contrario, andiamo indietro ancora di più: leggiti le basi di come si usa yii
Ricordalo quando fai il debug
#5
Posted 09 October 2012 - 09:31 AM
realtebo, on 09 October 2012 - 09:26 AM, said:
se si, il passo dopo è capire le relazioni. Questo articolo ti potrebbe essere utilissimo
in caso contrario, andiamo indietro ancora di più: leggiti le basi di come si usa yii
Ho creato il model solo per gli articoli. Ora lo faccio per MAGESE e passo alla lettura dell'articolo che mi hai consigliato.
Che dire... grazie mille!
#6
Posted 09 October 2012 - 09:51 AM
Leggiti prima il primo articolo: la sequenza solitamente è:
creo il model di ogni oggetto coinvolto
creo il crud dell'oggetto di cui ho bisogno di fare inserimenti e visualizzazioni
creo le tabelle se gii non le ha azzeccate
chiedo sul forum
Ricordalo quando fai il debug
#7
Posted 09 October 2012 - 10:02 AM
realtebo, on 09 October 2012 - 09:51 AM, said:
Leggiti prima il primo articolo: la sequenza solitamente è:
creo il model di ogni oggetto coinvolto
creo il crud dell'oggetto di cui ho bisogno di fare inserimenti e visualizzazioni
creo le tabelle se gii non le ha azzeccate
chiedo sul forum
Perfetto. Ho creato model e CRUD di MAGESE (anche se mi serviranno solo nella view degli articoli). Ora provo ad impostare la relazione.
#8
Posted 09 October 2012 - 03:54 PM
il db è mysql con engine myisam o innodb?
se è il secondo puoi impostare le relazioni già a livello di database, e gii quando ti genera le CRUD
ti imposta direttamente le relazioni.
se non è così puoi farlo a mano.
es: se Articoli ha un record collegato in MAGNESE
devi andare nel Model Articoli al metodo relations e imposti
public function relations()
{
return array(
'magnese'=>array(self::HAS_ONE, 'Magnese', 'campo_collegato'),
);
}
con campo_collegato che sarebbe la chiave esterna di Magnese collegata alla chiave primaria di Articoli
#9
Posted 10 October 2012 - 07:06 AM
MyIsam non supporta le foreign key, per cui in questo caso devi crearle a mano, ma per me ti conviene per autodidattica crearle a mano, ti permetterà di capirle meglio, anche se inizialmente diventerai un po' scemo
Ricordalo quando fai il debug
#10
Posted 10 October 2012 - 08:10 AM
Ho fatto tutti i passaggi richiesti ma non funziona probabilmente perchè, a livello di DB, non esite la chiave esterna nella tabella MAGESE... e purtroppo non posso modificare la struttura della tabella stessa(per tanti motivi).
Grazie davvero!
#11
Posted 10 October 2012 - 06:12 PM
#12
Posted 11 October 2012 - 12:45 AM
Dai un occhio alla doc per le relations su come crearle a mano.
#13
Posted 11 October 2012 - 01:30 AM
Non avere paura per il Db, non serve convertirlo. Le relation, come diceva zaccaria, funzionano anche senza avere le foreign key definite. L'unica cosa veramente fondamentale è avere la chiave primaria definita nelle due tabelle, ma immagino che un 'id' autoinc ce l'avrai
Ricordalo quando fai il debug
#14
Posted 11 October 2012 - 03:23 AM
poco male comunque, mi aiuta ad interrogarmi più volte sulla logica dell'applicazione.
buon lavoro
#15
Posted 29 October 2012 - 07:38 AM
realtebo, on 11 October 2012 - 01:30 AM, said:
Non avere paura per il Db, non serve convertirlo. Le relation, come diceva zaccaria, funzionano anche senza avere le foreign key definite. L'unica cosa veramente fondamentale è avere la chiave primaria definita nelle due tabelle, ma immagino che un 'id' autoinc ce l'avrai
Ciao. Scusa per l'assenza degli ultimi giorni. Non ho più lavorato su quel progetto ed ho momentaneamente sospeso lo studio di Yii.
In ogni caso, da oggi riprendo.
Ecco la situazione:
Tabella ARTICOLI
ID | CODICE | DESCRIZIONE1 | ...altre colonne
Tabella MAGESE
ID | ART_CODICE | ESISTENZA | ...altre colonne
Al momento opero in questo modo, senza aver specificato alcuna relazione:
$disp = Yii::app()->db->createCommand()
->select('ESISTENZA,ORDINATO,IMPEGNATO')
->from('magese')
->where('ART_CODICE="'.$data->CODICE.'"')
->queryRow();grazie!
#16
Posted 04 November 2012 - 11:17 AM
Segui la strada di Yii.
Hai la tabella in DB? Si !
Hai creato il MODEL di ciascuna tabella ?
Ricordalo quando fai il debug
#17
Posted 06 November 2012 - 06:12 AM
realtebo, on 04 November 2012 - 11:17 AM, said:
Segui la strada di Yii.
Hai la tabella in DB? Si !
Hai creato il MODEL di ciascuna tabella ?
si si! ho creato model e operazioni crud di ciascuna tabella
#18
Posted 06 November 2012 - 07:43 AM
Ora se non erro possiamo iniziare a creare l'interfaccia utente con form, filtro e lista, giusto ?
Per curiosità le due tabelle ARTICOLI e MAGESE come sono relazionate l'una all'altra ?
per esempio: magese.articoloId [n->1] articoli.id
Ad ogni modo, questo è il momento di creare il CRUD.
Vai in Gii e genera il CRUD per entrambi i model appena creati.
Ti consiglio questo intanto: http://www.yiiframew...start.first-app
Ricordalo quando fai il debug
#19
Posted 06 November 2012 - 08:55 AM
realtebo, on 06 November 2012 - 07:43 AM, said:
Ora se non erro possiamo iniziare a creare l'interfaccia utente con form, filtro e lista, giusto ?
Per curiosità le due tabelle ARTICOLI e MAGESE come sono relazionate l'una all'altra ?
per esempio: magese.articoloId [n->1] articoli.id
Ad ogni modo, questo è il momento di creare il CRUD.
Vai in Gii e genera il CRUD per entrambi i model appena creati.
Ti consiglio questo intanto: http://www.yiiframew...start.first-app
Ho generato il crud di entrambi i model.
Infatti finora ho proceduto in questo modo:
$disp = Yii::app()->db->createCommand()
->select('ESISTENZA,ORDINATO,IMPEGNATO')
->from('magese')
->where('ART_CODICE="'.$data->CODICE.'"')
->queryRow();Il problema sta nel settare le relazioni e nel farle funzionare :S
Grazie!
Nel database MyIsam, ecco la situazione:
Tabella ARTICOLI
ID | CODICE | DESCRIZIONE1 | ...altre colonne
Tabella MAGESE
ID | ART_CODICE | ESISTENZA | ...altre colonne
In pratica la tabella MAGESE, che tiene traccia delle quantità in magazzino, contiene il CODICE dell'articolo.
#20
Posted 07 November 2012 - 09:21 AM
Yii fa quasi tutto in completo automatismo, filtri compresi.
A parte questo chiarimento, andiamo avanti.
Capisco quindi che MAGESE.ART_CODICE [ N - > 1 ] ARTICOLI.ID
Nella function rules del model di MAGESE devi inserire
return array( "articolo" => array(self::BELONGS_TO, 'ARTICOLI', 'ART_CODICE' ), );
A questo punto nella view admin di magese avrai una cgrid view con una sequenza di colonne, giusto ?
Me la puoi copia/incollare per favore?
per vedere il nome dell'articolo invece dell'id puoi fare tipo cosi: sostituisci
colums = array ( .... ART_CODICE, ..... )
array(
'name'=>'ART_CODICE',
'value'=>'data->articolo->DESCRIZIONE1',
),
Tieni conto che Yii è piuttosto CASE-SENSITIVE, se lavori con le maiuscole metti anche i nomi delle relazioni e i vari 'name' in maiuscolo
A questo punto avrai la descrizione dell'articolo di magazzino al posto del suo id nella vista admin di MAGESE.
Se siamo arrivati fino a qui, il prossimo passo sono prima il filtro e poi l'ordinamento.
Ma dimmi se sei riuscito a seguirmi fino a qui. Senza il codice sotto è un poco fatica...
In ogni modo, carica uno screenshot di cosa eventualmente non va su imageshack o similari e linkalo, così mi è più facile aiutarti.
Ricordalo quando fai il debug

Help
















