Mysql
 sql >> Database >  >> RDS >> Mysql

Come essere più Laravel in un'app CRUD?

Sembra che tu stia impostando una relazione polimorfica, nel qual caso, separerei tutto, il che significa che avresti un modello per Cat, Dog, Turtle e PetData. Avresti controller per CatController, DogController e TurtleController. E avresti un modulo Gatto, un modulo Cane e un modulo Tartaruga, ognuno che contiene anche input per i dati necessari per la tua tabella pet_info.

Per creare la relazione polimorfica, la tua tabella pet_data richiederà alcune modifiche. Basta cambiare la colonna della tabella in pet_type . Laravel si aspetta che un certo nome per questa colonna e per il suo contenuto sia il nome di un modello piuttosto che il nome della tua tabella.

Configurare i modelli per questi è molto semplice, per iniziare farò PetData e Dog.

class Dog extends Eloquent 
{
    protected $table = 'dogs_data';
    protected $timestamps = false;

    public function petData()
    {
        return $this->morphMany('PetData', 'pet');
    }
}

class PetData extends Eloquent
{
    protected $timestamps = false;

    public function pet()
    {
        return $this->morphTo();
    }
}

Puoi leggere di più su questo qui... http://laravel.com/docs/eloquent# relazioni polimorfiche

L'idea di avere modelli/controller separati per ogni cosa potrebbe sembrare un sacco di lavoro, ma fa molto quando si cerca di mantenere o aggiungere animali aggiuntivi alla tua app perché raramente dovresti modificare il codice di produzione, togliendo la possibilità di introdurre più bug quando si tenta di aggiungere miglioramenti al tuo sito web.

Ora diventa molto facile salvare un animale domestico e i relativi dati senza doversi preoccupare di pet_id e pet_type nella tabella pet_data, Laravel se ne occuperà per te. La funzione sul controller del tuo cane potrebbe assomigliare a questa...

class DogController extends BaseController
{
    public function save()
    {
        $dog = new Dog;
        $dog->name = Input::get('name');
        $dog->age = Input::get('age');
        $dog->save();

        $pet_data = new PetData;
        $pet_data->color = Input::get('color');
        $dog->petData()->save($pet_data);
    }
}

Per quanto riguarda la creazione di un altro controller per gli amministratori, direi di sì, fallo. Non fa mai male mantenere parti del tuo sito Web che consideri diverse in file diversi. Non solo aiuta con l'organizzazione, ma ancora, con la separazione delle preoccupazioni, di cui probabilmente dovresti leggere di più.

Ci sono anche alcune fantastiche opzioni di terze parti per la gestione dei ruoli. Ho usato zizaco/entrust prima e l'ho trovato molto facile da gestire. Potrebbe semplificarti la vita quando cerchi di gestire chi può fare cosa sulla tua app web.