表名加S问题

我建一个Models article 好象表名是articles的,都会加上S。
已邀请:

qufo

赞同来自: FiveSay

自己看
Eloquent ORM-基本用法
注意我们并没有告诉 Eloquent User 模型会使用哪个数据库表。若没有特别指定,系统会默认自动对应名称为「类名称的小写复数形态」的数据库表。所以,在上面的例子中, Eloquent 会假设 User 将把数据存在 users 数据库表。可以在类里定义 table 属性自定义要对应的数据库表。

既然是 小写复数形态嘛 ,就简单了, article -> articles 。
事情往往并不象我们想象的那么简单。\vendor\laravel\framework\src\Illuminate\Support\Pluralizer.php 看看哪些是可数名词哪些是不可数名词,以 ox 结尾的加什么,以s 结尾的加什么。

另外, fish 的复数是什么? 哈哈哈 - 请参照 张全蛋的笑声。
想永绝后患?请看以下黑科技:
<?php
abstract class BaseModel extends Eloquent {

/**
* 返回表名,不用处理单数复数

*/
public function getTable(){
    return $this->table?$this->table:class_basename($this);
}
}
?>

以后的模型不要直接由 Eloquent 派生,改为由 BaseModel 派生,就不用特殊指定表名,表名与模型名称直接一致,也不再驼峰呀什么的了。毕竟是黑科技,请谨慎使用。

细佬虫虫

赞同来自:

Schema::create('pages', function(Blueprint $table)
{
$table->increments('id');
$table->string('title');
$table->string('slug')->nullable();
$table->text('body')->nullable();
$table->integer('user_id');
$table->timestamps();
});

建表是pages..建Models是page

php artisan generate:model page

FiveSay - 成武

赞同来自:

基本规范是这样的:
  • 常规表名: 小写、下划线分割、最后一个单词采用英文复数(注意,不是单纯的加"s")。
      - 模型:首字母大写、驼峰试命名、英文单数。
  • 多对多关联表:小写、下划线分割、英文单数。
      - 模型:通常不需要额外定义。

JohnLui

赞同来自:

我基本每个 model 都指定表名。。。

要回复问题请先登录注册