web-dev-qa-db-fra.com

Laravel - Conventions de dénomination des bases de données, tables et colonnes?

J'utilise laravel objets de données éloquents pour accéder à mes données, quelle est la meilleure façon de nommer mes tables, colonnes, clés étrangères/primaires, etc.?

J'ai trouvé qu'il existe de nombreuses conventions de dénomination. Je me demande simplement lequel convient le mieux aux modèles éloquents laravel.

Je pense à suivre la convention de dénomination:

  1. Noms de table singuliers (ex: Post)
  2. Noms de colonnes singulières (ex: userId - id utilisateur dans la table de publication)
  3. Boîtier en chameau pour plusieurs mots dans les noms de table (ex: PostComment, PostReview, PostPhoto)
  4. Boîtier en chameau pour plusieurs mots dans les noms de colonne (ex: firstName, postCategoryId, postPhotoId)

Donc, avec cela, je pourrais utiliser une syntaxe similaire dans le contrôleur.

$result = Post::where('postCategoryId', '4')->get();

Existe-t-il des directives Laravel pour cela? Puis-je procéder avec ces conventions de dénomination?

Si quelqu'un a de meilleures suggestions, je serai très heureux de les entendre. Merci beaucoup!

24
The Dude

Laravel a sa propre convention de dénomination. Par exemple, si le nom de votre modèle est User.php then Laravel s'attend à ce que la classe 'User' soit à l'intérieur de ce fichier. Il attend également la table users pour le modèle User. Cependant, vous pouvez remplacer cette convention en définissant une propriété de table sur votre modèle comme,

    class User extends Eloquent implements UserInterface, RemindableInterface {
        protected $table = 'user';
    }

De Laravel documentation officielle:

Notez que nous n'avons pas dit à Eloquent quelle table utiliser pour notre modèle utilisateur. Le nom pluriel en minuscule de la classe sera utilisé comme nom de table sauf si un autre nom est explicitement spécifié. Ainsi, dans ce cas, Eloquent supposera que le modèle utilisateur stocke les enregistrements dans la table des utilisateurs. Vous pouvez spécifier une table personnalisée en définissant un $table propriété sur votre modèle

Si vous utiliserez l'ID de table utilisateur dans une autre table comme clé étrangère, ce devrait être une casse de serpent comme user_id pour qu'il puisse être utilisé automatiquement en cas de relation. Encore une fois, vous pouvez remplacer cette convention en spécifiant des arguments supplémentaires dans la fonction de relation. Par exemple,

    class User extends Eloquent implements UserInterface, RemindableInterface {
        public function post(){
            return $this->hasMany('Post', 'userId', 'id');
        }
    }

    class Post extends Eloquent{
        public function user(){
            return $this->belongsTo('User', 'userId', 'id');
        }   
    }

Documents pour Laravel relation éloquente

Pour les autres colonnes du tableau, vous pouvez les nommer comme vous le souhaitez.

Je vous suggère de parcourir la documentation une fois.

33
user4055288

Je ne suis pas d'accord en général avec ces exemples que vous avez tous les deux montrés ici.

C'est propre si vous jetez un oeil à la documentation officielle Laravel, en particulier dans la session de relations d'Eloquent ( http://laravel.com/docs/4.2/eloquent#relationships ).

Les noms de table doivent être au pluriel, c'est-à-dire la table `` utilisateurs '' pour le modèle utilisateur.

Et les noms de colonnes n'ont pas besoin d'être dans Camel Case, mais dans Snake Case. Voir c'est déjà répondu: Base de données/modèle convention de nom de champ dans Laravel?

C'est trop habituel, vous pouvez voir que c'est comme le RedBeanORM: le Snake Case pour les colonnes, même si vous en essayez un autre. Et il est conseillé d'éviter de répéter les noms de table avec ceux de colonne en raison de la méthode que vous pouvez appeler à partir de l'objet Model pour accéder à leurs relations.

6
Seiji Manoan