当前位置: 首页 > 知识库问答 >
问题:

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

林德惠
2023-03-14

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

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

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

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

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

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

对此,是否有任何建议的Laravel指南?我可以继续这些命名约定吗?

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

共有3个答案

沃皓轩
2023-03-14
    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');
        }   
    }
濮丰
2023-03-14

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

它是干净的,如果你看看官方Laravel留档,尤其是在雄辩的关系会议(http://laravel.com/docs/4.2/eloquent#relationships)。

表名应该是复数,即用户模型的“用户”表。

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

这太常见了,你可以看到它就像RedBeanORM:列的蛇壳,即使你尝试了其他的。建议避免用列名称重复表名称,因为您可以从Model对象中调用方法来访问它们的关系。

岳时铭
2023-03-14

Laravel有自己的命名约定。例如,如果模型名为User。php然后Laravel希望类“User”位于该文件中。对于用户模型,它还需要用户表。但是,您可以通过在模型上定义表属性来覆盖此约定,如,

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

来自Laravel官方文件:

请注意,我们没有告诉Eloquent我们的用户模型使用哪个表。除非明确指定了另一个名称,否则类的小写复数名称将用作表名。因此,在本例中,Eloquent将假定用户模型在users表中存储记录。您可以通过在模型上定义$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雄辩关系的文档

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

我建议你检查一下文件。

 类似资料:
  • 根据在这里找到的命名约定:https://restfulapi.net/resource-naming/,我有一个无法找到答案的特定问题。 以customers和accounts为例,可以使用URN“/customers/{customerId}/accounts”标识特定“customer”的子集合资源“accounts”,如何为多个客户ID查找accounts?这种情况的命名约定是什么? 是使

  • 9.2.1. 识别符限制条件 9.2.2. 识别符大小写敏感性 数据库、表、索引、列和别名是识别符。该节描述了在MySQL中识别符的允许的语法。 下面的表描述了每类识别符的最大长度和允许的字符。 识别符 最大长度(字节) 允许的字符 数据库 64 目录名允许的任何字符,不包括‘/’、‘\’或者‘。’ 表 64 文件名允许的任何字符,不包括‘/’、‘\’或者‘。’ 列 64 所有字符 索引 64 所

  • 问题内容: 对于那些没有特殊符号(例如m_foo或)命名成员变量的人foo_,如何命名ctor和setter的参数? 到目前为止我尝试过的一些选项… 问题答案: 我正在使用foo_,它比_foo更好,因为它不会与实现特定的函数名称和关键字发生冲突。

  • 问题内容: 如果我想使用SQL在SQL数据库中简单地重命名一列(而不更改其类型或约束,仅更改其名称),该怎么做?还是不可能? 这适用于任何声称支持SQL的数据库,我只是在寻找一个特定于SQL的查询,而无论实际的数据库实现如何,该查询都将起作用。 问题答案: 在PostgreSQL(以及许多其他RDBMS)上,可以使用常规语句来做到这一点:

  • 问题内容: 如何获得特定表中的列名列表? IE。 火鸟表: 得到这样的列表: 问题答案: 如果要获取特定表中的列名列表,则这是您需要的sql查询: 我在firebird 2.5中尝试过此方法,并且可以正常工作。 顺便说一句,YOUR-TABLE-NAME周围的单引号是必需的

  • 问题内容: 我必须获取所有唯一键约束和特定数据库索引的列表。我正在做这样的事情: 只是想确认这是否是正确的方法,或者是否有更好的方法来做同样的事情? 问题答案: 由于独特的约束是在幕后作为索引实现的,因此您可以直接从sys.indexes获取所有这些信息: 对所有数据库重复(大概没有针对特定表的过滤器):