Laravel 5.6 db:seed 抛出 FatalThrowableError:找不到类 'APP\Todo'

Posted

技术标签:

【中文标题】Laravel 5.6 db:seed 抛出 FatalThrowableError:找不到类 \'APP\\Todo\'【英文标题】: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不同 【参考方案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();

【讨论】:

以上是关于Laravel 5.6 db:seed 抛出 FatalThrowableError:找不到类 'APP\Todo'的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.3 db:seed 命令根本不起作用

Laravel php artisan db:seed 导致“use”语句错误

学习新框架laravel 5.6 (第二天)-DB,控制器及模型使用

拉拉维尔 5.4。调用错误:php artisan db:seed

我可以使用 php artisan db:seed 播种相关表吗?

Laravel 5.6 查询构建器总和