Laravel 模型查找旧表名

Posted

技术标签:

【中文标题】Laravel 模型查找旧表名【英文标题】:How to change Laravel model's table name 【发布时间】:2016-03-31 10:52:57 【问题描述】:

我正在使用 laravel 5 并将表的名称从“domain_related_settings”更改为“DomainRelatedSettings”。

我通过回滚所有迁移、更改特定迁移并再次运行它们来做到这一点。在 phpmyadmin 中,我看到了我的新表名。

当我使用相应的模型(DomainRelatedSetting.php)作为类“DomainRelatedSetting”时

$domainSettings = App\DomainRelatedSetting::where('hostname', 'localhost')->first();

它给出了以下错误:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'databasename.domain_related_settings' doesn't exist (SQL: select * from `domain_related_settings` where `hostname` = localhost limit 1)

看来是看domain_related_settings。那是我的旧表名,我将其更改为 DomainRelatedSetting。

当我在类中定义新表时,它会起作用。

protected $table = 'DomainRelatedSettings';

我在中间件中使用了以下导致错误的函数: $domainSettings = App\DomainRelatedSetting::where('hostname', 'localhost')->first();

我在我的项目中搜索了这个字符串(使用 phpstorm),它给出了 0 个结果(除了来自 laravel 日志)。

除了迁移和模型之外,我应该更新这个位置吗?

【问题讨论】:

在模型类protected $table = 'DomainRelatedSettings';上定义表属性后仍然报错? 不,当我添加这一行时,错误消失了。 查看Table Names部分:laravel.com/docs/5.1/eloquent#defining-models 我认为我应该在模型中使用单数形式,在表格中使用复数形式。但似乎当我的模型名称为“SomeExample”时。它不仅查找复数版本,还查找“some_example”。谢谢。有时我不明白他们为什么不在(已经非常好的)文档中添加更全面的示例。 【参考方案1】:

如果您不想使用默认的table 名称(“snake case”,类的复数名称),则应将其指定为model: p>

protected $table = 'DomainRelatedSettings';

查看Table Names 部分的文档。

【讨论】:

【参考方案2】:

您需要在每个 Laravel 模型中使用指定表名

protected $table = 'name_of_table';

在你的情况下

protected $table = 'DomainRelatedSettings';

【讨论】:

【参考方案3】:

您可以通过在模型上定义表格属性来指定自定义表格:

class theModel extends Model

    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'name_of_table';

如果它不起作用,请尝试在根文件夹中输入以下命令: composer dump-autoload -o

【讨论】:

【参考方案4】:

如果你在你的模型中指定了表的真实名称但还是出现同样的问题,试试:

composer dump-autoload

【讨论】:

以上是关于Laravel 模型查找旧表名的主要内容,如果未能解决你的问题,请参考以下文章

带有变量的 Laravel 模型表名

Laravel 在使用 ->create() 函数时不遵守模型中设置的表名

如何在 Laravel 中返​​回数据库表名

Laravel 查询构建器和表名

Laravel 数据库操作之Eloquent ORM模型

即使在 Laravel eloquent 中设置后,表名也不会改变?