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 模型查找旧表名的主要内容,如果未能解决你的问题,请参考以下文章