Laravel 5:找不到DB Seed类

时间:2015-05-11 19:35:34

标签: 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');
        }
    }

我有这个文件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
            ] );

        }
    }

现在我打电话给

php artisan db:seed

我得到了:

[ReflectionException]                        
  Class MemberInvitationSeeder does not exist

我尝试了所有我能找到的东西,包括&#34; composer dump-autoload&#34;。无济于事。我做错了什么?

7 个答案:

答案 0 :(得分:56)

第一步 - 生成种子:

php artisan make:seed MemberInvitationSeeder

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

$this->call(MemberInvitationSeeder::class);

第三步

composer dump-autoload

第四步

php artisan db:seed

这应该有效

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

"classmap": [
    "database"
],

答案 1 :(得分:6)

我通过使用指令use

将类添加到播种器文件中来解决这个问题
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use App\YourClassName;

答案 2 :(得分:1)

这对我有用

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

答案 3 :(得分:1)

我遇到了类似的错误,但是我使用的是DB Facade DB::table,而不是模型。如果有人遇到类似问题,我会发布答案。

种子文件的命名空间为namespace Database\Seeders;,而laravel试图在命名空间中查找DB类,因此出现了错误。

Class 'Database\Seeders\DB' not found

解决方案:

  • 删除名称空间并运行composer dump-autoload
  • \DB::table('stock_categories')->([ ... ]);添加反斜杠,以便Laravel从根(不是从指定的命名空间)开始查找 DB外观

例如,

\DB::table('MemberInvitation')->insert( [
         '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
    ] );

答案 4 :(得分:0)

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

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

它不存在,因为我手动添加了这个类。

现在,继续,如果我再次添加这些类,我应该使用什么来让我的类自动进入自动加载器?

答案 5 :(得分:0)

如果上述解决方案不起作用,请尝试此解决方案。 您可能已经更改了名称空间(默认情况下为“ App”)。 您需要做的是转到composer.json文件并检查以下内容:

"autoload": {
      "classmap": [
          "database"
      ],
      "psr-4": {
          "App\\": "app/"
      }
  },

如果像本例一样,名称空间是App,则此解决方案不适合您。

否则,请使用找到的名称空间并将该行插入您的seeder类:

use NameSpaceFound\User;

答案 6 :(得分:0)

如果要使用字符串作为参数,则应包括名称空间

 $this->call('Database\Seeders\MemberInvitationSeeder');