【问题标题】:How to change Laravel model's table nameLaravel 模型查找旧表名
【发布时间】: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';上定义表属性后仍然报错?
  • 不,当我添加这一行时,错误消失了。
  • 我认为我应该在模型中使用单数形式,在表格中使用复数形式。但似乎当我的模型名称为“SomeExample”时。它不仅查找复数版本,还查找“some_example”。谢谢。有时我不明白他们为什么不在(已经非常好的)文档中添加更全面的示例。

标签: php mysql laravel laravel-5


【解决方案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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-25
          • 1970-01-01
          • 2020-04-10
          • 2019-02-26
          • 1970-01-01
          • 2018-07-07
          • 2018-06-21
          • 2019-11-28
          相关资源
          最近更新 更多