雄辩使用错误的表名

时间:2017-07-26 01:53:32

标签: php mysql laravel eloquent

我有一个名为ReferrerMedium的模型以及referrer_mediums表的迁移。

这是我的班级:

namespace App;

class ReferrerMedium extends \Eloquent
{
    //
}

这是我的迁移:

Schema::create('referrer_mediums', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
});

这是我的代码:

foreach (ReferrerMedium::all() as $referrer_medium) {
    $options[$referrer_medium->name] = $referrer_medium->name;
}

此代码导致错误Base table or view not found: 1146 Table 'leadbind.referrer_media' doesn't exist

为什么它试图查询referrer_media表而不是referrer_mediums ???

2 个答案:

答案 0 :(得分:3)

因为medium的复数类型是media,所以你应该在模型中手动指定表名:

protected $table = 'referrer_mediums';

但我建议您进行迁移以更改表名。

答案 1 :(得分:2)

一般定义标准是,如果您创建一个具有复数名称的表并为此表创建模型为singular,则模型会自动连接相应的表,否则您应该在模型中定义表名,如:

$protected $table = 'referrer_mediums';

在您的情况下,模型名称为ReferrerMedium,因此它会搜索ReferrerMedium的单数,referrer_media这就是问题背后的原因。

因此,您可以将表格创建为referrer_media,或者如上所述在模型中定义表格名称。

希望你明白。