【问题标题】:Laravel 5.6 db:seed throws FatalThrowableError : Class 'APP\Todo' not foundLaravel 5.6 db:seed 抛出 FatalThrowableError:找不到类 'APP\Todo'
【发布时间】:2018-09-20 04:18:31
【问题描述】:

当我运行此命令时,我正在使用 faker generate 生成虚假条目并将其插入数据库中,并借助 php artisan db:seed 它显示一个错误:

播种:TodosTableSeeder

Symfony\Component\Debug\Exception\FatalThrowableError : 类 'APP\Todo' 未找到

在 /var/www/html/todos/vendor/laravel/framework/src/Illuminate/Database/Eloquent/FactoryBuilder.php:217 213| if ($this->amount class)->newCollection(); 215| } 216|

217| $instances = (new $this->class)->newCollection(array_map(function () use ($attributes) { 218|返回 $this->makeInstance($attributes); 219| }, range(1, $this->amount))); 220| 221| $this->callAfterMaking($instances);

异常跟踪:

1 Illuminate\Database\Eloquent\FactoryBuilder::make([]) /var/www/html/todos/vendor/laravel/framework/src/Illuminate/Database/Eloquent/FactoryBuilder.php:167

2 Illuminate\Database\Eloquent\FactoryBuilder::create() /var/www/html/todos/database/seeds/TodosTableSeeder.php:15

请使用参数 -v 查看更多详细信息。

这是我的代码 UserFactory.php

<?php

use Faker\Generator as Faker;

$factory->define(App\User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
        'remember_token' => str_random(10),
    ];
});

$factory->define(App\Todo::class, function(Faker $faker) {
    return[
        'todos' => $faker->sentence(10)
        ];

});

TodosTableSeeder.php

<?php
use App\Todo;
use Illuminate\Database\Seeder;


class TodosTableSeeder extends Seeder
{

    public function run()
    {
        factory(APP\Todo::class, 10)->create() ;
    }
}

DatabaseSeeder.php

    <?php
use App\Todo;
use Illuminate\Database\Seeder;


class DatabaseSeeder extends Seeder
{

    public function run()
    {
        //$this->call(UsersTableSeeder::class);
            $this->call(TodosTableSeeder::class);
    }
}

【问题讨论】:

  • 改用factory(App\Todo::class, 10)-&gt;create() ;。大小写很重要。
  • 我在 TodosTableSeeder 中使用过它。您所说的大写重要是什么意思?
  • 含义APPApp不同

标签: php database laravel factory laravel-seeding


【解决方案1】:

你需要为你的 todos 应用创建一个模型。

在这种情况下,编译器正在寻找 App/Todo: 意味着它正在 App 文件夹中寻找 todo.php...

工匠制作:模型 Todo

^首先运行这个命令.. 然后你会在你的 App 文件夹中看到一个 Todo.php。 之后运行你原来的命令。

php artisan db:Seed

希望它有效。在 laravel 7.0 中为我工作。

【讨论】:

    【解决方案2】:
    use App\Todo;
    use Illuminate\Database\Seeder;
    
    
    class TodosTableSeeder extends Seeder
    {
    
        public function run()
        {
            //factory(APP\Todo::class, 10)->create() ;
          factory(App\Todo::class, 10)->create() ;
        //I changed the APP to App
        }
    }
    

    【讨论】:

    • 这已经在 cmets 和两个答案中得到了回答。您至少应该强调为什么您更改了某些内容,以便其他人可以从您的答案中学习
    【解决方案3】:

    我遇到了同样的问题。 问题是我更改了项目名称,因此找不到 App\Todo。 将 App 替换为您的项目名称为 MYTODO/Todo::class。

    TodoTableSeeder.php

    public function run()
    {
    factory(MYTODO\Todo::class, 10)->create();
    }
    

    希望对你有帮助!

    【讨论】:

      【解决方案4】:

      您尝试使用 APP\Todo 和 APP\Todo 获取 Class,因为不存在是正确的,正确的形式是 \App\Todo::class

      但是如果你在头部调用类,当你需要这个类时你只需要这样调用它:class All :: class

      希望对你有帮助:)

      【讨论】:

        【解决方案5】:

        TodoTableSeeder.php

        run方法改为

        public function run()
        {
            factory(Todo::class, 10)->create();
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-22
          • 2018-11-04
          • 2020-01-21
          • 1970-01-01
          相关资源
          最近更新 更多