【Laravel】Laravel中命名规范

之前一直用Spring+Mybatis做WEB开发,由于公司的需要开始接触Laravel框架。不可否认确实被它所吸引,使用起来太优雅了。在这里不是说SSM这套解决方案不好,每个东西都有它存在的价值。Laravel使用起来这么优雅的原因我认为最大的原因是:约定优于配置

切入正题,使用规范的好处是让你编码更加清晰。

数据库命名

  • 建议使用复数名词作为表名,例如 users。
  • 多对多关系中中间表用单数作为表名,例如 article_image。
  • 数据库以及表名使用均使用小写英文字母,单词之间采用下划线为分割符,例如article_user。
  • 不要使用关键字作为数据库或表的名字,例如null,select等等。

文件命名

  • Migrate

    • 采用:动词 + _Table Name + _table,例如

      • create_users_table
      • alert_users_table
    • 保持上面的Table Name与迁移文件中的表名一致
//2017_11_08_155329_create_articles_table.php的文件部分内容如下:
Schema::create('articles', function (Blueprint $table) {
  //注意actions是一样的
});
  • Model

    • 一律使用单数,例如 user,article
  • Seeder

    • ModelName + TableSeeder,例如:UserTableSeeder
  • resources目录下文件

    • resource下所有目录命名一律小写,单字间以下划线 “_” 分割.

方法

  • Model中方法体的命名规则
    在一对多与一对一等关联关系中是需要通过外键来建立业务关系的:

情况一:


class Post extends Model
{
    /**
     * 获得此博客文章的评论。
     */
    public function comments()
    {
        return $this->hasMany('App\Comment');
    }
}

Eloquent 会自动确定 Comment 模型上正确的外键字段。按照约定,Eloquent 使用父级模型名的「snake case」形式、加上 _id 后缀名作为外键字段。对应到上面的场景,就是 Eloquent 假定 Comment 模型对应到 Post 模型上的那个外键字段是 post_id。这里再次强调模型名(Model)最好用单数形式

情况二:



namespace App;

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
    /**
     * 获得此评论所属的文章。
     */
    public function post()
    {
        return $this->belongsTo('App\Post');
    }
}

在上面的例子中,Eloquent 会尝试用 Comment 模型的 post_id 与 Post 模型的 id 进行匹配。默认外键名是 Eloquent 依据方法名、并在方法名后加上 _id (也就是这里的方法名加上_id)后缀确定的。如果您的数据库没有做到上面的约束,请将相关的列添加上。虽然是可选参数,但是我的建议是最好把参数都写上。这样逻辑更加清晰,不易犯错。

情况三:
如果您没有给Model指定对应的数据库表,那么它默认会用类的【蛇形名称】,复数名称来作为数据表的名称,例如下面的例子中Eloquent 将会假设 Video模型被存储记录在 videos 数据表中,但是你可以在模型上定义一个 table 属性,用来指定自定义的数据表名称”my_videos”,建议加上$table属性:

class Video extends Model
{
    /**
     * 与模型关联的数据表
     *
     * @var string
     */
    protected $table = 'my_videos';
}

情况四:

多态关联中类型字段值最好自定义。

默认,Laravel 会使用完全限定类名作为关联模型保存在多态模型上的类型字段值。比如,在上面的例子中,Comment 属于 Post 或者 Video,那么 commentable_type的默认值对应地就是 App\Post 和 App\Video。但是,您可能希望将数据库与程序内部结构解耦。那样的话,你可以定义一个「多态映射表」来指示 Eloquent 使用每个模型自定义类型字段名而不是类名:

use Illuminate\Database\Eloquent\Relations\Relation;

Relation::morphMap([
    'posts' => 'App\Post',
    'videos' => 'App\Video',
]);

您可以在 AppServiceProvider 中的 boot 函数中使用 Relation::morphMap 方法注册「多态映射表」,或者使用一个独立的服务提供者注册。

你可能感兴趣的:(>>PHP<<)