Laravel 5:找不到DB Seed类

Jas*_*enX 23 php laravel laravel-5 artisan

我有这个DatabaseSeeder.php:

<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;



    class DatabaseSeeder extends Seeder {

        /**
         * Run the database seeds.
         *
         * @return void
         */
        public function run()
        {
            Model::unguard();

            $this->call('MemberInvitationSeeder');
        }
    }
Run Code Online (Sandbox Code Playgroud)

我有这个文件MemberInvitationSeeder.php,兄弟姐妹到DatabaseSeeder.php文件

<?php

use Illuminate\Database\Seeder;
use App\MemberInvitation;

    class MemberInvitationSeeder extends Seeder {

        public function run()
        {
            MemberInvitation::truncate();

            MemberInvitation::create( [
                'id' => 'BlahBlah' ,//com_create_guid(),
                'partner_id' => 1,
                'fisrt_name' => 'Thats',
                'last_name' => 'Me',
                'email' => 'me@mymail.com',
                'mobile_phone' => '444-342-4234',
                'created_at' => new DateTime
            ] );

        }
    }
Run Code Online (Sandbox Code Playgroud)

现在我打电话

php artisan db:seed
Run Code Online (Sandbox Code Playgroud)

我得到:

[ReflectionException]                        
  Class MemberInvitationSeeder does not exist
Run Code Online (Sandbox Code Playgroud)

我尝试了所有我能找到的东西,包括"composer dump-autoload".无济于事.我究竟做错了什么?

Krz*_*ski 75

第一步 - 生成种子:

php artisan make:seed MemberInvitationSeeder
Run Code Online (Sandbox Code Playgroud)

第二步 - 在DatabaseSeeder.php中添加行:

$this->call(MemberInvitationSeeder::class);
Run Code Online (Sandbox Code Playgroud)

第三步:

composer dump-autoload
Run Code Online (Sandbox Code Playgroud)

第四步:

php artisan db:seed
Run Code Online (Sandbox Code Playgroud)

这应该工作


如果这不是线索,请检查文件composer.json并确保在"autoload"部分中包含此代码:

"classmap": [
    "database"
],
Run Code Online (Sandbox Code Playgroud)

  • 只运行"composer dump-autoload"我需要做的事情. (19认同)
  • 这应该是公认的答案,目前的答案是基于错误的结论或缺少知识. (3认同)
  • 很酷但有点OT:您可以使用您的模型来种子数据库.而不是`DB :: table('my_foos') - > insert(['col1'=>'Value 1'])``使用`MyFoos :: create(['col1'=>'Value1'])`.好处是,自动维护的`created_at`和`updated_at`正在为您填写.使用`DB :: table('x') - > insert()`时它们是空的. (2认同)

ent*_*rez 7

我通过使用以下指令将类添加到种子文件中来解决了这个问题use

<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use App\YourClassName;
Run Code Online (Sandbox Code Playgroud)


msa*_*i76 6

这对我来说工作

  1. composer dump-autoload
  2. php artisan db:seed


Jas*_*enX 5

我相信我现在知道原因了。

新类 MemberInvitationSeeder 不在composer.json 文件中自动加载的类中。

它不在那里,因为我手动添加了该类。

现在,如果我再次添加此类类,我应该使用什么才能让我的类自动加载到自动加载器中?

  • 查看您的composer.json 文件。在“autoload”部分中,您应该看到它在哪里设置“classmap”,并且数组中应该有“database”,告诉 Composer 将该文件夹中的所有内容添加到自动加载器中。如果里面没有,那就是你的问题了。如果在那里,请尝试“composer self-update”,然后“composer dump”,看看是否有帮助。 (2认同)