Laravel - 数据库、表和列命名约定?

我正在使用 laravel 雄辩的数据对象来访问我的数据,命名表、列、外键/主键等的最佳方式是什么?

我发现,有很多命名约定。我只是想知道哪一个最适合laravel雄辩的模特。

我正在考虑遵循以下命名约定:

  1. 单数表名(例如:Post)
  2. 单数列名(例如:用户 Id - 帖子表中的用户 ID)
  3. 表名中多个单词的驼峰大小写(例如:PostComment、PostReview、PostPhoto)
  4. 列名中多个单词的驼峰大小写(例如:firstName、postCategoryId、postPhotoId)

因此,有了这个,我可以在控制器中使用类似的语法。

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

有没有推荐的Laravel指南?我可以继续这些命名约定吗?

如果有人有更好的建议,我会很高兴听到他们。多谢!


答案 1

Laravel有自己的命名约定。例如,如果您的模型名称是,那么Laravel期望类“User”位于该文件中。它还需要模型的表。但是,您可以通过在模型上定义表属性来覆盖此约定,例如:User.phpusersUser

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

来自Laravel官方文档:

请注意,我们没有告诉 Eloquent 要将哪个表用于我们的用户模型。类的小写复数名称将用作表名,除非显式指定了其他名称。因此,在这种情况下,Eloquent 将假定 User 模型将记录存储在 users 表中。您可以通过在模型上定义属性来指定自定义表$table

如果您将另一个表中的用户表 ID 用作外键,那么它应该像 snake-case 一样,以便在关系的情况下可以自动使用它。同样,您可以通过在关系函数中指定其他参数来覆盖此约定。例如user_id

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

Laravel雄辩关系的文档

对于表中的其他列,您可以根据需要命名它们。

我建议你浏览一次文档。


答案 2

总的来说,我不同意你们俩在这里展示的这些例子。

如果你看一下Laravel的官方文档,特别是在Eloquent的关系会议(http://laravel.com/docs/4.2/eloquent#relationships)中,这是很干净的。

表名应为复数形式,即用户模型的“用户”表。

列名不需要在骆驼案中,而是在蛇案中。看到它已经回答了:Laravel中的数据库/模型字段名称约定?

你太平常了,你可以看到它就像RedBeanORM:Snake Case的专栏,即使你尝试其他的。建议避免使用列名重复表名,因为您可以从 Model 对象调用该方法来访问其关系。


推荐