Codeigniter επιστροφή πίνακα στον controler από model

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
cn92
Δημοσιεύσεις: 232
Εγγραφή: 25 Ιαν 2008 19:00
Τοποθεσία: Γλυφαδα
Επικοινωνία:

Codeigniter επιστροφή πίνακα στον controler από model

Δημοσίευση από cn92 » 01 Αύγ 2011 17:06

Χρησιμοποιώ το Codeigniter για ένα cms που φτιάχνω.

Έχω σε ένα model ένα mysql query που επιστρέφει έναν πίνακα

Κώδικας: Επιλογή όλων

function get_group($group, $lang)
    {
        $this->db->select('name');
        $this->db->from('πινακα');
        $this->db->where('...');
        $query = $this->db->get();
        $data = $query->result_array();
        return $data;
    }
Θέλω τον πίνακα που έχω στην $data να τον επιστρέφω στον controller για να τον εμφανίσω μετά στον χρήστη.

Έχω ψάξει σε google, tutorials κτλ, αλλά δεν έχω καταφέρει κάτι..
Μου επιστρέφει ένα error -> Undefined index
Τι κάνω λάθος;

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Codeigniter επιστροφή πίνακα στον controler από model

Δημοσίευση από jpk » 01 Αύγ 2011 20:23

Με το Undefined index καταλαβαίνεις … πας να πάρεις μια τιμή από ένα associative array που δεν υπάρχει. Άρα ή δεν έχει επιστρέψει το array που περίμενες ή έχει επιστρέψει null (αυτά γενικά γιατί από Codeigniter απλά μια ματιά του έχω ρίξει)

Άβαταρ μέλους
cn92
Δημοσιεύσεις: 232
Εγγραφή: 25 Ιαν 2008 19:00
Τοποθεσία: Γλυφαδα
Επικοινωνία:

Codeigniter επιστροφή πίνακα στον controler από model

Δημοσίευση από cn92 » 01 Αύγ 2011 22:51

έχω δοκιμάσει να συνεχίσω με την $data και να βάλω όλα τα αποτελέσματα σε μία μεταβλητή χωρισμένα με παύλες (dedomeno 1 - dedomeno 2 - dedo..), και να επιστρέψω την μεταβλητή, και την επιστρέφει κανονικά με τα αποτελέσματα του query. Οπότε έχει βρει δεδομένα.

Άρα λογικά τα διαβάζω λάθος.

Στον controller βάζω στην μεταβλητή $trans τον πίνακα.

Κώδικας: Επιλογή όλων

$trans = $this->Model_name->get_group('var1', 'var2');

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Codeigniter επιστροφή πίνακα στον controler από model

Δημοσίευση από jpk » 01 Αύγ 2011 23:09

Δεν έχω απάντηση φίλε, …. Που μπορεί και να φταίει και το framework που επέλεξες …
Τελευταία επεξεργασία από το μέλος jpk την 02 Αύγ 2011 18:00, έχει επεξεργασθεί 1 φορά συνολικά.

Άβαταρ μέλους
cn92
Δημοσιεύσεις: 232
Εγγραφή: 25 Ιαν 2008 19:00
Τοποθεσία: Γλυφαδα
Επικοινωνία:

Codeigniter επιστροφή πίνακα στον controler από model

Δημοσίευση από cn92 » 02 Αύγ 2011 01:02

λύθηκε το πρόβλημα. Πέρασα τα δεδομένα σε νέο πίνακα και όρισα το key και τώρα λειτουργεί σωστά.

gvre
Δημοσιεύσεις: 992
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Codeigniter επιστροφή πίνακα στον controler από model

Δημοσίευση από gvre » 02 Αύγ 2011 14:23

cn92 έγραψε:

Κώδικας: Επιλογή όλων

function get_group($group, $lang)
    {
        $this->db->select('name');
        $this->db->from('πινακα');
        $this->db->where('...');
        $query = $this->db->get();
        $data = $query->result_array();
        return $data;
    }
Άσχετο, αλλά ρίξε μια ματιά στο Method Chaining του CI.

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Codeigniter επιστροφή πίνακα στον controler από model

Δημοσίευση από jpk » 02 Αύγ 2011 22:41

gvre έγραψε: Άσχετο, αλλά ρίξε μια ματιά στο Method Chaining του CI.
Κοίταξα αυτό που είπες, σίγουρα αναγνωρίζω ότι είναι από τις πιο παλιές λογικές για το τι είναι και πως χρησιμοποιείται ένα db object και με ατελείωτα implementation όχι μόνο σε PHP και Java αλλά και σε γλώσσες που βασίζονται καθαρά σε αυτή την λογική (βάσεις που αποτυπώνονται σε associative arrays , select με αυτόν τον τρόπο , active record , γλώσσες που είναι μαζί και RDBMS και framework).

Επέτρεψε μου όμως να μου φέρνει εμένα αποστροφή (έχω δουλέψει με ανάλογο framework) ο κώδικας:

Κώδικας: Επιλογή όλων

$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);
Σίγουρα δεν το θεωρώ αυτό που λέει «simplify your syntax» . Επίσης πολύ περίεργη αντίληψη έχει για το τι σημαίνει cashing αν και το λέει «While not "true" caching» …

Πάντως δεν επιχειρώ να ανοίξω θέμα για αυτή την λογική του τι είναι ένα db object και την συγκεκριμένη εφαρμογή του active record pattern. Τόσο η αρχιτεκτονική που χρησιμοποιεί κάποιος όσο και το framework που επιλέγει έχει να κάνει με τα προγραμματιστικά του βιώματα.

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

Codeigniter επιστροφή πίνακα στον controler από model

Δημοσίευση από Khronos » 03 Αύγ 2011 00:35

Άαχετο, αλλά πόσο μου έχουν λείψει τα posts του fafou!

Άβαταρ μέλους
cn92
Δημοσιεύσεις: 232
Εγγραφή: 25 Ιαν 2008 19:00
Τοποθεσία: Γλυφαδα
Επικοινωνία:

Codeigniter επιστροφή πίνακα στον controler από model

Δημοσίευση από cn92 » 03 Αύγ 2011 01:08

Με βολεύει να τον διαβάζω όταν είναι σε ξεχωριστές γραμμές. Όταν ολοκληρώνω την κάθε function τον γράφω όπως λες.
Ευχαριστώ πάντως :)

gvre
Δημοσιεύσεις: 992
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Codeigniter επιστροφή πίνακα στον controler από model

Δημοσίευση από gvre » 03 Αύγ 2011 10:57

jpk έγραψε:
gvre έγραψε: Άσχετο, αλλά ρίξε μια ματιά στο Method Chaining του CI.
Κοίταξα αυτό που είπες, σίγουρα αναγνωρίζω ότι είναι από τις πιο παλιές λογικές για το τι είναι και πως χρησιμοποιείται ένα db object και με ατελείωτα implementation όχι μόνο σε PHP και Java αλλά και σε γλώσσες που βασίζονται καθαρά σε αυτή την λογική (βάσεις που αποτυπώνονται σε associative arrays , select με αυτόν τον τρόπο , active record , γλώσσες που είναι μαζί και RDBMS και framework).

Επέτρεψε μου όμως να μου φέρνει εμένα αποστροφή (έχω δουλέψει με ανάλογο framework) ο κώδικας:

Κώδικας: Επιλογή όλων

$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);
Σίγουρα δεν το θεωρώ αυτό που λέει «simplify your syntax» . Επίσης πολύ περίεργη αντίληψη έχει για το τι σημαίνει cashing αν και το λέει «While not "true" caching» …

Πάντως δεν επιχειρώ να ανοίξω θέμα για αυτή την λογική του τι είναι ένα db object και την συγκεκριμένη εφαρμογή του active record pattern. Τόσο η αρχιτεκτονική που χρησιμοποιεί κάποιος όσο και το framework που επιλέγει έχει να κάνει με τα προγραμματιστικά του βιώματα.
Κατ' αρχάς να αναφέρω ότι δε χρησιμοποιώ CΙ, ούτε κάποιο άλλο έτοιμο framework. Αυτό που έγραψα ήταν ότι μπορεί ο OP να "σπάσει" το

Κώδικας: Επιλογή όλων

$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);
σε πολλές γραμμές χωρίς να χρειάζεται να γράφει σε κάθε γραμμή το $this->db.

Σχετικά με το

Κώδικας: Επιλογή όλων

$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);
συμφωνώ 100% μαζί σου. Ποτέ δεν κατάλαβα γιατί το παραπάνω είναι απλούστερο από το παρακάτω :D

Κώδικας: Επιλογή όλων

SELECT title FROM mytable WHERE id='$id' LIMIT 10, 20

thundergr
Δημοσιεύσεις: 49
Εγγραφή: 09 Μαρ 2009 14:39

Codeigniter επιστροφή πίνακα στον controler από model

Δημοσίευση από thundergr » 06 Αύγ 2011 02:49

gvre έγραψε: συμφωνώ 100% μαζί σου. Ποτέ δεν κατάλαβα γιατί το παραπάνω είναι απλούστερο από το παρακάτω
Παντως υπάρχει και λίγο πιο εύκολο syntax από αυτό που εγραψες. :wink:

Κώδικας: Επιλογή όλων

$this->db->select('title')->get_where('mytable', array('id' => $id), $limit, $offset);
Και επίσης (από το user guide του Codeigniter)...
Beyond simplicity, a major benefit to using the Active Record features is that it allows you to create database independent applications, since the query syntax is generated by each database adapter. It also allows for safer queries, since the values are escaped automatically by the system.

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Codeigniter επιστροφή πίνακα στον controler από model

Δημοσίευση από jpk » 06 Αύγ 2011 13:04

thundergr έγραψε: Και επίσης (από το user guide του Codeigniter)...
Beyond simplicity, a major benefit to using the Active Record features is that it allows you to create database independent applications, since the query syntax is generated by each database adapter. It also allows for safer queries, since the values are escaped automatically by the system.
Έτσι είναι, όχι μόνο για το Codeigniter αλλά για οποιοδήποτε framework έχει μια στοιχειωδώς επαναχρησιμοποιήσιμη λειτουργία του Model στο MVC (φυσικά και η λογική δεν πρέπει να σχετίζεται με το σε ποια βάση είσαι). Όσο για το άλλο ότι προσφέρει περεταίρω ασφάλεια γιατί κάνει real escape το σύστημα , θα αρκούσε ένα PDO ή κάποια κλάση με μητρική το PDO και prepared statements.

Αυτά δεν έχουν να κάνουν με το πόσο φρικτός (κατ’ εμέ) είναι ο κώδικας

Κώδικας: Επιλογή όλων

$this->db->select('title')->get_where('mytable', array('id' => $id), $limit, $offset);
ή

Κώδικας: Επιλογή όλων

$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);
Πολύ γρήγορα (γιατί πιστεύω ότι έχει νόημα) θα εξηγήσω γιατί. (Πριν από αυτό να σημειώσω ότι και το Codeigniter λειτουργεί και με άλλη λογική , των «κανονικών» Query Bindings π.χ. http://codeigniter.com/user_guide/database/queries.html ). Το CI το χρησιμοποιώ για παράδειγμα , όπως είπα πριν δυστυχώς υπάρχουν και άλλα τέτοια παραδείγματα αντικειμενοστραφούς παραλογισμού και σε άλλα frameworks και σε άλλες γλώσσες.

Όταν λες $this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20); η λογική λέει ότι το db είναι ιδιότητα της τρέχουσας τάξης η οποία ιδιότητα αυτή (τάξη ούσα) έχει την συμπεριφορά select που επιστρέφει τάξη , η οποία με την σειρά της έχει την συμπεριφορά from και πάει λέγοντας.
Αμ δεν … δείτε για παράδειγμα την CI_DB_active_record στην μέδοθο distinct (βάζω αυτή γιατί είναι μικρή)

Κώδικας: Επιλογή όλων

	function distinct($val = TRUE)
	{
		$this->ar_distinct = (is_bool($val)) ? $val : TRUE;
		return $this;
	}
Ουσιαστικά τι κάνει … δομεί σταδιακά το query δίνοντας τιμές σε ιδιότητες της τάξης (μέχρι εδώ καλά και λογικό) αλλά μετά επιστρέφει και τον εαυτό της. Έχει κάποια λογική το τελευταίο που να συνδέεται με OOP; Εγώ δεν το βλέπω, αντιθέτως γίνεται ώστε να μπορείς να γράψεις το … $this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20); Σχεδόν με όποια σειρά θέλεις τις μεθόδους χωρίς να παίζει ιδιαίτερο ρόλο.

Είναι αρκετά συχνό το φαινόμενο να χρησιμοποιείται ένα σύστημα , μια γλώσσα , μια αρχιτεκτονική με λογική κάποιου άλλου.Στο συγκεκριμένο παράδειγμα ( του CI ) έχει ανακατευθεί functional programming με OOP και σε μερικές περιπτώσεις και χύμα κώδικας (και δεν εννοώ στον front controller ή σε κάτι ανάλογο που η PHP επιτάσσει να κάνεις αν μη τι άλλο ένα instantiate). Φυσικά γίνεται και αλλού (π.χ. έχω δει αρκετή COBOL γραμμένη σε Java).

Όπως είπα αυτή είναι η άποψή μου (φυσικά δεν ισχυρίζομαι ότι κατέχω την μοναδική αλήθεια) την μοιράζομαι γιατί μπορεί σε κάτι να βοηθήσει κάποιον ή να διαβάσω κάτι και να αναθεωρήσω.

gvre
Δημοσιεύσεις: 992
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Codeigniter επιστροφή πίνακα στον controler από model

Δημοσίευση από gvre » 06 Αύγ 2011 16:19

thundergr έγραψε: Και επίσης (από το user guide του Codeigniter)...
Beyond simplicity, a major benefit to using the Active Record features is that it allows you to create database independent applications, since the query syntax is generated by each database adapter. It also allows for safer queries, since the values are escaped automatically by the system.
Εννοείται ότι δε χρησιμοποιείς απευθείας τα db extensions της php, αλλά μέσω κάποιου ενδιάμεσου layer το οποίο χρησιμοποιεί prepared statements.
Το "database independent applications" μπορείς να το πετύχεις μέσω του ίδιου layer.

billiaswhs
Δημοσιεύσεις: 346
Εγγραφή: 11 Νοέμ 2004 00:29
Επικοινωνία:

Codeigniter επιστροφή πίνακα στον controler από model

Δημοσίευση από billiaswhs » 07 Αύγ 2011 04:03

Πάντως σχετικά με αυτό το θέμα ενδιαφέρον είναι το παρακάτω post

http://philsturgeon.co.uk/blog/2011/06/ ... about-orms

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες