Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment être plus Laravel dans une application CRUD ?

Il semble que vous établissiez une relation polymorphe, auquel cas je séparerais tout, ce qui signifie que vous auriez un modèle pour Cat, Dog, Turtle et PetData. Vous auriez des contrôleurs pour CatController, DogController et TurtleController. Et vous auriez un formulaire Chat, un formulaire Chien et un formulaire Tortue, chacun contenant également des entrées pour les données dont vous avez besoin pour votre table pet_info.

Pour créer la relation polymorphe, votre table pet_data nécessitera quelques modifications. Changez simplement la colonne du tableau en pet_type . Laravel attend un certain nom pour cette colonne et pour que son contenu soit le nom d'un modèle plutôt que le nom de votre table.

Configurer les modèles pour ceux-ci est très facile, je vais faire PetData et Dog pour commencer.

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();
    }
}

Vous pouvez en savoir plus à ce sujet ici... http://laravel.com/docs/eloquent# relations polymorphes

L'idée d'avoir des modèles/contrôleurs séparés pour tout peut sembler beaucoup de travail, mais cela va très loin lorsque vous essayez de maintenir ou d'ajouter des animaux supplémentaires à votre application car vous devriez rarement avoir à modifier le code de production, en supprimant la possibilité de introduisant plus de bogues lorsque vous essayez d'ajouter des améliorations à votre site Web.

Maintenant, il devient très facile de sauvegarder un animal de compagnie et les données associées sans avoir à se soucier du pet_id et du pet_type dans la table pet_data, Laravel s'en chargera pour vous. La fonction de votre manette pour chien pourrait ressembler à ceci...

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);
    }
}

En ce qui concerne la création d'un autre contrôleur pour les administrateurs, je dirais oui, faites-le. Cela ne fait jamais de mal de conserver des parties de votre site Web que vous considérez comme différentes dans différents fichiers. Cela aide non seulement à l'organisation, mais encore une fois, à la séparation des préoccupations, sur lesquelles vous devriez probablement en savoir plus.

Il existe également de fantastiques options tierces pour gérer les rôles. J'ai utilisé zizaco/entrust avant et je l'ai trouvé très facile à gérer. Cela pourrait vous faciliter la vie lorsque vous essayez de gérer qui peut faire quoi sur votre application Web.