繁体   English   中英

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

[英]Laravel - Database, Table and Column Naming Conventions?

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

我发现,那里有很多命名约定。 我只是想知道哪一种最适合 laravel eloquent 模型。

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

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

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

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

是否有任何推荐的 Laravel 指南? 我可以继续使用这些命名约定吗?

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

Laravel 有它自己的命名约定。 例如,如果您的模型名称是User.php那么 Laravel 期望类 'User' 位于该文件中。 该公司还预计usersUser模型。 但是,您可以通过在模型上定义表属性来覆盖此约定,例如,

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

来自 Laravel 官方文档:

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

如果您将在另一个表中使用 user table id 作为外键,那么它应该像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 雄辩关系文档

对于表中的其他列,您可以随意命名它们。

我建议您查看一次文档。

我总体上不同意你们俩在这里展示的这些例子。

如果您查看 Laravel 的官方文档,就会很清楚,尤其是在 Eloquent 的关系会话中 ( http://laravel.com/docs/4.2/eloquent#relationships )。

表名应该是复数,即用户模型的'users'表。

并且列名不需要在 Camel Case 中,但需要在 Snake Case 中。 看到已经回答了: Laravel 中的数据库/模型字段名称约定?

太常见了,您可以看到它就像 RedBeanORM:列的 Snake Case,即使您尝试其他列也是如此。 由于可以从 Model 对象调用以访问它们的关系,因此建议避免将表名与列名重复。

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

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

默认的表命名约定很容易与多个包的安装发生冲突,这些包可能偶然具有相同的类名。 一种解决方案是将表命名为:[vendor].[package].[class],这与 Laravel 中命名空间的应用方式一致。

编辑:虽然不建议在表名中使用点。 是否有替代约定可用于确保模块化构建应用程序的开发人员无需担心现有表名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM