【问题标题】:Laravel seed issue, laravel is looking for plural table nameLaravel 种子问题,laravel 正在寻找复数表名
【发布时间】:2018-03-18 19:14:39
【问题描述】:

我刚开始学习 Laravel,但在为我的测试表生成种子时遇到问题。

控制台错误说: “未找到基表或视图:1146 表 'laravel.testms' 不存在...”

我的表被称为“testm” - 我不知道为什么它会查找 testms

TestmFactory.php

use Faker\Generator as Faker;

$factory->define(App\Testm::class, function (Faker $faker) {
        return [

        'test' => $faker->paragraph
    ];
});

TestmTableSeeder.php

use Illuminate\Database\Seeder;

class TestmTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
      factory(App\Testm::class, 5)->create();
    }
}

DatabaseSeeder.php

  public function run()
    {

        $this->call(LinksTableSeeder::class);
        $this->call(TestmTableSeeder::class);
    }

app/Testm.php

class Testm extends Model
{
   // Below line fixed my code :-)
     protected $table = 'testm';
     protected $fillable = [
        'test'

    ];
}

【问题讨论】:

  • laravel 是表所在的数据库的名称。检查config/database.php 中数据库连接的database 值。
  • Laravel 查找模型名称的复数形式作为表格
  • 所以你想重写这个功能并在模型Testm.php中显式定义表参数,代码如下protected $table = 'testm';
  • 将此添加到您的模型protected $table = 'testm';

标签: laravel


【解决方案1】:

来自Laravels documentation

按照约定,“snake case”,类的复数名称将用作表名,除非明确指定另一个名称。

为了在模型中显式定义表名,在您的情况下为Testm.php,您需要将以下代码添加到类中:

protected $table = 'testm';

希望这会有所帮助!

【讨论】:

  • 现在说得通了。没有你的帮助,我会为此查看我的文件很长时间:D
  • @riten 没问题!我强烈建议使用 Laravel 的文档。它上面的搜索框让查找此类内容变得超级快!
  • 是的,我只是不知道要寻找什么。我的意思是我什至没有意识到它在寻找复数,我在想我的文件中有一些拼写错误的名字。
  • 是的,它可能会让人感到困惑,尤其是因为它并没有明确说明为什么它正在以这种方式寻找它。如果您想要一种通过迁移生成模型的简单方法,您应该看看在命令行中使用php artisan make:model Test -m。它可以节省您手动书写的时间。
  • 我刚刚在这里找到了更多关于复数的信息:stackoverflow.com/questions/23943663/…
【解决方案2】:

尝试将此添加到您的模型中

protected $table = 'testm';

【讨论】:

  • 是的,没错,但是“Derek”的答案更有教育意义,所以我将其标记为答案
  • 没问题??我也可以学习如何详细回答?
猜你喜欢
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 2020-08-04
  • 2015-02-04
相关资源
最近更新 更多