【问题标题】:Does Eloquent ORM change CamelCase to underscores?Eloquent ORM 是否将 CamelCase 更改为下划线?
【发布时间】:2013-07-31 08:31:29
【问题描述】:

我在使用 Eloquent 的 Laravel 中遇到错误:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 
'task_manager.rel_developers_projects' doesn't exist (SQL: insert into 
`rel_developers_projects` (`project_id`, `developer_id`, `updated_at`, `created_at`) 
values (?, ?, ?, ?)) (Bindings: array ( 0 => '1', 1 => '1', 2 => '2013-07-31 08:23:35', 3 
=> '2013-07-31 08:23:35', ))

但是,模型称为 RelDevelopersProject,表称为 RelDevelopersProjects。

Eloquent 会尝试将 CamelCased 名称转换为下划线吗?

【问题讨论】:

  • 不要使用驼峰式表名。请改用 rel_developers_projects。就是这样。

标签: laravel eloquent


【解决方案1】:

表名不要使用驼峰式。

如果你需要,试试这个:

class RelDevelopersProject extends Eloquent {

    protected $table = 'RelDevelopersProjects';

}

请参阅 Laravel 文档中的 eloquent

【讨论】:

  • 干杯,我认为它做到了并且知道你可以覆盖它,但在文档中找不到它说表名应该是驼峰式
  • 好的。我从 Laravel Docs 制作了一个本地副本,每两周自动更新一次。所以我是最新的文档:-)
  • 你应该更频繁地更新,Laravel 更新很多:)(幸运!):)
  • @Andreyco 哈哈,真的。只是节流一点,以免在更新中花费太多精力:P
  • @cept0 由于数据库架构与设置不同,它们可以区分大小写和不区分大小写。此外,一些操作系统在处理 db 文件系统的方式上也有所不同。因此,为了使数据库表名与将来的任何堆栈更改更兼容,最好使用下划线表名,如 table_name 而不是 TableName 或 tableName 或 TABLENAME。另一个原因是人为错误。因此,如果您使用 CamelCase,您最终可能会因拼写错误而出现错误。但是,这最终都是个人喜好。
【解决方案2】:

是的,确实如此。 只需将表名定义为 Model 中的属性

/**
 * The database table used by the model.
 *
 * @var string
 */
protected $table = 'RelDevelopersProject';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    相关资源
    最近更新 更多