2014-09-19 77 views
23

我使用laravel雄辩的数据对象来访问我的数据,什么是最好的方式来命名我的表,列,外国/主键等?Laravel - 数据库,表和列命名约定?

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

我想下面的命名约定:

  1. 奇异表名(例如:邮政)
  2. 奇异列名(例如:用户id - 在后表用户ID)
  3. 骆驼外壳在表名的多个词(例如:PostComment,PostReview,PostPhoto)
  4. 骆驼套管在列名的多个词(例如:名字,postCategoryId,postPhotoId)

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

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

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

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

+1

您可以根据需要使用它们。但问题将是你有正确的定义他们自动使用的情况下的关系。 – 2014-09-19 06:38:20

回答

26

Laravel拥有自己的命名约定。例如,如果您的型号名称为User.php,则Laravel预计类“用户”在该文件中。它也预计usersUser模型。但是,你可以通过你的模型像定义表属性覆盖此约定,

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

从Laravel官方文档:

请注意,我们没有告诉雄辩该表来使用我们的用户模型。 除非明确指定了其他名称,否则该类的小写复数名称将用作表名 。因此,在这种情况下,雄辩 将假定用户模型将记录存储在用户表中。您可以通过在模型定义$table属性指定 定制表

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

​​

Docs for Laravel eloquent relationship

对于表等栏目,你可以为你喜欢的名字。

我建议你一次通过文档。

+0

你的'hasMany'示例是错误的 - 密钥应该被替换(fk作为第二参数,pk作为第三)。 – 2014-09-19 08:42:24

+0

@Jarek Tkaczk对不起。我编辑了我的答案 – user4055288 2014-09-19 10:14:25

+0

表名“city”呢?它应该是城市还是城市?明确我猜。 – Bsienn 2017-02-01 12:38:46

5

我不同意这些例子,你们都已经在这里展示了。

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

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

列名不需要在骆驼案例中,而是在Snake案例中。看到它已经被回答了:Database/model field-name convention in Laravel?

这太平常了,你可以看到它就像是RedBeanORM:即使你尝试使用另一个列的Snake案例。由于可以从Model对象调用以访问它们的关系的方法,因此建议避免重复使用列名称。

-1

默认的表名命名约定很容易与安装可能附带相同类名的多个包相冲突。解决办法是将表格命名为:[vendor]。[package]。[class],这与Laravel中的命名空间应用方式一致。

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

+0

“名称表为:..”?为什么要这么做? – m02ph3u5 2017-05-14 12:50:16