Laravel 5.6 db: seed выдает FatalThrowableError: класс 'APP \ Todo' не найден

Я использую 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 ‹1) {214 | return (новый $ this-> class) -> newCollection (); 215 | } 216 |

217 | $ instance = (new $ this-> class) -> newCollection (array_map (function () use ($ attributes) {218 | return $ this-> makeInstance ($ attributes); 219 |}, range (1, $ this- > количество))); 220 | 221 | $ this-> callAfterMaking ($ instance);

След исключения:

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);
    }
}

person Ashar Khan    schedule 10.04.2018    source источник
comment
Попробуйте вместо этого factory(App\Todo::class, 10)->create() ;. Вопросы капитализации.   -  person aynber    schedule 10.04.2018
comment
Я использовал его в TodosTableSeeder. что вы имеете в виду под заглавными буквами?   -  person Ashar Khan    schedule 10.04.2018
comment
Значение APP не то же самое, что App   -  person aynber    schedule 10.04.2018


Ответы (5)


in TodoTableSeeder.php

изменить run метод на

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

Вы пытаетесь получить класс с APP \ Todo и APP \ Todo, который не существует, потому что он неверен, правильная форма - \ App \ Todo :: class

Но если вы вызываете класс в заголовке, когда вам нужен класс, вам просто нужно называть его следующим образом: class All :: class

Надеюсь, это вам поможет :)

person Ricardo Castillo    schedule 10.04.2018

у меня такая же проблема. Проблема заключалась в том, что я изменил название своего проекта, поэтому он не может найти App \ Todo. Замените App именем своего проекта как MYTODO / Todo :: class.

TodoTableSeeder.php

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

Я надеюсь, это поможет вам!

person padmavathy mca    schedule 12.03.2019

Вам нужно сделать модель своего приложения todos.

В этом случае компилятор ищет App / Todo: означает, что он ищет todo.php в папке App ...

производитель: модель Todo

^ Выполните сначала эту команду ... затем вы увидите Todo.php в папке вашего приложения. после этого запустите исходную команду.

php artisan db:Seed

Надеюсь, что это работает. работал у меня в laravel 7.0.

person Mohsin    schedule 07.03.2020

person    schedule
comment
На это уже был дан ответ как в комментариях, так и в двух ответах. Вы должны хотя бы выделить почему вы что-то изменили, чтобы другие могли узнать из вашего ответа. - person Nico Haase; 30.08.2019