PHP MVC Visualizza molti record - logica del modello

1

Scommetto che questa domanda è già stata fatta ma non riesco a formare il mio pensiero come puoi vedere dal titolo, quindi non ho trovato nulla. Sto lavorando con MVC da un po 'di tempo e sono abbastanza felice di dire che quando le cose funzionano bene sono quasi perfette (ai miei occhi), tuttavia non mi sento mai di fare un buon lavoro in questo particolare compito .

Supponiamo di avere il mio modello per un utente, con tutte le sue proprietà e metodi come

namespace Models;

class User {

    private $id;
    private $name;

    public function __get($name){
        return $this->$name;
    }

    public function setName($name){
        $this->name = $name;
        return true;
    }

    public function save(){
        // Save user to database
    }

    public function getById($id){
        // fill properties from database with id $id
    }

}

Tutto bene, ma poi quando ho bisogno di visualizzare un elenco di utenti per, ad esempio una pagina di ricerca o qualcosa del genere, finisco sempre per fare qualcosa come aggiungere un metodo statico getUsers o qualcosa che restituisce una matrice di \Models\User oggetti che semplicemente non mi danno quella sensazione di "buon codice", si spera che tu sappia cosa intendo. Diventa ancora peggio quando ho bisogno di ottenere solo un paio di colonne dal database, quindi il maggior numero di proprietà è vuoto e mi sembra di incasinare.

Voglio chiederti qual è il modo corretto per farlo?

    
posta php_nub_qq 27.01.2015 - 14:50
fonte

1 risposta

1

Non so se questo è quello che stai cercando, ma qui va.

Metodi come save, get, getBy, getAll, etc, sono generici e funzionano idealmente su più modelli. Per la maggior parte, l'unica differenza sarà in PARTICOLARE dove si trovano quei dati. Quindi, perché non creare un modello eccellente di sorta per estendere tutti i tuoi modelli.

class Super_Model
{
    public $table; // this will be defined in the model

    public function getAll(){
        // returns all from $table
    }

    // etc
}

class User_Model extends Super_Model
{
    public function __construct()
    {
        $this->table = 'Users';
    }
}

Ora puoi fare quanto segue senza dover definire getUsers:

$user_model = new User_Model();
$users = $user_model->getAll();
    
risposta data 27.01.2015 - 16:40
fonte

Leggi altre domande sui tag