Yii Framework Forum: Εμφάνιση Δεδομένων Της Βάσης Σε Dropdown List - Yii Framework Forum

Jump to content

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

Εμφάνιση Δεδομένων Της Βάσης Σε Dropdown List

#1 User is offline   marios 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 31
  • Joined: 21-September 12
  • Location:Kavala, Greece

Posted 16 October 2012 - 04:32 AM

Καλημέρα / καλησπέρα σε όλους!!!


Έχω 2 πίνακες όπου ένα χαρακτηριστικό του πρώτου αποτελεί ξένο κλειδί για τον δεύτερο. Θέλω κατά την εισαγωγή νέας εγγραφής ή κατά την ενημέρωση του δεύτερου πίνακα να εμφανίζω (σε dropdownlist) όλες τις τιμές του χαρακτηριστικού που αποτελεί ξένο κλειδί ώστε να μπορεί να επιλέγει ο χρήστης κάποια ήδη υπάρχουσα τιμή που έχει εισαχθεί σε προγενέστερη φάση στον πρώτο πίνακα.

Έχω ήδη κάνει μια dropdown list στην οποία πραγματοποιώ μια αντιστοίχιση ακεραίων με ένα string. Ο τρόπος πρόσβασης σε δεδομένα της βάσης προφανώς απέχει από τον τρόπο που προσέγγισα την πρώτη dropdown list. Υπάρχει κάποια built in συνάρτηση (στην οποία να ορίζω το μοντέλο και το χαρακτηριστικό που θέλω και να τη περνάω ως όρισμα στη μέθοδο dropDownList) και να γίνεται η δουλειά, ή πρέπει να γράψω συνάρτηση που τραβάει δεδομένα από τη βάση??
0

#2 User is offline   GoofyX 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 154
  • Joined: 15-April 09
  • Location:Thessaloniki, Greece

Posted 16 October 2012 - 04:44 AM

Ναι, απλό είναι (κλασική περίπτωση αυτό που θέλεις).

Με Active Record το κάνεις εύκολα. Έχεις την κλάση-μοντέλο για τον δεύτερο πίνακά σου. Στην κλάση-μοντέλο του πρώτου πίνακα (εκεί που μπαίνει το id για το δεύτερο), εννοείται ότι έχεις φτιάξει το relation για την άλλη κλάση (μέσω της συνάρτησης relations()). Μετά, στη φόρμα του πρώτου μοντέλου έχεις κάτι σε:

echo CHtml::activeDropDownList($model, $attribute, CHtml::listData($model2, 'id', 'name'));


όπου $model είναι το πρώτο σου μοντέλο, ενώ $model2 το δεύτερο. Τα objects αυτά τα δημιουργείς με

$model = MyClass::model()->findAll(...);


Έτσι δημιουργείς το dropdown που αναφέρεται με foreign key σε άλλη κλάση.
... Morpheus: What is "real"? How do you define "real"? If you 're talking about what you can feel, what you can smell, what you can taste and see, then "real" is simply electrical signals interpreted by your brain...
0

#3 User is offline   marios 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 31
  • Joined: 21-September 12
  • Location:Kavala, Greece

Posted 17 October 2012 - 10:19 AM

Συγνώμη που άργησα να απαντήσω αλλά έτρεχα από χθες...Για να γίνω πιο σαφής γιατί κάτι από τα λεγόμενά σου μάλλον δεν κατάλαβα!!

Έχω την κλάση artworks στην οποία ένα χαρακτηριστικό της (το Volume_Id) είναι ξένο κλειδί που αναφέρεται στο id του πίνακα volumes. Στη κλάση artworks και μέσα στη μέθοδο relations και σύμφωνα με το guide του Yii έχω γράψει:


return array(	
			
        'volume' => array(self::BELONGS_TO, 'Volumes', 'Volume_Id'),
		
);


Πάω στη φόρμα της κλάσης artworks και γράφω τα εξής (τα οποία ειρήσθω εν παρόδω δεν δουλεύουν γιατί μάλλον δεν έχω καταλάβει κάτι):

$model = Volumes::model()-> findAll('id');
$model2 = Artworks::model()->findAll('Volume_Id');
echo CHtml::activeDropDownList($model2, 'Volume_Id', CHtml::listData($model, 'id'));


Δυστυχώς το ότι είμαι νέος στο Yii έχει ως επακόλουθο να ρωτάω και βλακείες!!
0

#4 User is offline   GoofyX 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 154
  • Joined: 15-April 09
  • Location:Thessaloniki, Greece

Posted 17 October 2012 - 11:05 AM

Αυτή η γραμμή μάλλον δεν είναι σωστή

$model2 = Artworks::model()->findAll('Volume_Id');


Εσύ πας να κάνεις θεωρητικά update ένα object. Άρα λογικά θα έχεις κάτι σε

$model2 = Artworks::model()->findByPk($artwork_id);


όπου $artwork_id κάποια παράμετρος που να δείχνει ποιο artwork θες να αλλάξεις. Κατά τα άλλα, ο κώδικάς σου θέλει κάποιες αλλαγές:

$model = Volumes::model()-> findAll(array('select'=>'id, name'));
$model2 = Artworks::model()->findAll('Volume_Id');
echo CHtml::activeDropDownList($model2, 'Volume_Id', CHtml::listData($model, 'id', 'name'));


Στην πρώτη γραμμή, το όρισμα τύπου array στην findAll λέει να επιλέξει τις στήλες id και name (υποθέτοντας ότι υπάρχει τέτοια στήλη). Στην listData ναι μεν του λες από ποιο μοντέλο να φτιάξει τα δεδομένα ($model), αλλά επίσης πρέπει να του πεις από αυτό το μοντέλο ποιο θα χρησιμοποιήσει ως value και ως κείμενο που θα φαίνεται σε κάθε επιλογή. Παράδειγμα, για id=1 να έχεις τιμή πχ. Τηλεόραση. Δηλαδή να βγει σε html κάτι σε:

<option value="1">Τηλεόραση</option>


Δηλαδή το id είναι το 1 και το text που θα φαίνεται το Τηλεόραση. Έτσι φαντάσου ότι για όσα αντικείμενα τύπου Volumes θα δημιουργηθούν αντίστοιχα τόσα <option> tags. Δοκίμασέ το και πες μας.

Επίσης, το ότι είσαι νέος στο Yii, δε σημαίνει ότι δεν πρέπει να ρωτάς. Απορίες έχεις, μην αγχώνεσαι. Όλοι ήμασταν κάποια στιγμή στη θέση σου (και πολλές φορές νιώθουμε ακόμη νέοι).


... Morpheus: What is "real"? How do you define "real"? If you 're talking about what you can feel, what you can smell, what you can taste and see, then "real" is simply electrical signals interpreted by your brain...
0

#5 User is offline   marios 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 31
  • Joined: 21-September 12
  • Location:Kavala, Greece

Posted 18 October 2012 - 09:42 AM

Εν τέλει έγραψα αυτό με τη βοήθεια του guide και αφού πρώτα με έβαλες εσύ στο κλίμα Βασίλη!!Όταν τελειώσω τη διπλωματική, (πλέον είμαι κοντά), κερνάω καφέ στην Αριστοτέλους μια που είσαι και δίπλα!!


//Ήμουν μέσα στο $model οπότε δεν χρειαζότανε η γραμμή: model2 = Artworks::model()->findAll('Volume_Id');
$model2 = Volumes::model()->findAll();
$list= CHtml::listData($model2,'id','id');
echo $form->dropDownList($model,'Volume_Id', $list);


Ευχαριστώ και πάλι!!
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