【问题标题】:Laravel 5: DB Seed class not foundLaravel 5:找不到 DB 种子类
【发布时间】:2015-07-22 11:03:17
【问题描述】:

我有这个 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

我尝试了所有能找到的方法,包括“composer dump-autoload”。无济于事。我做错了什么?

【问题讨论】:

  • $this-&gt;call('\MemberInvitationSeeder'); 有什么不同吗?
  • use App\MemberInvitationSeeder in DatabaseSeeder.php
  • 它只是声称 \MemberInvitationSeeder 未找到...
  • 使用 App\MemberInvitationSeeder 没有效果。仍然没有找到。
  • 你记得运行 composer dump-autoload 吗?

标签: php laravel laravel-5 laravel-artisan


【解决方案1】:

第一步 - 生成种子:

php artisan make:seed MemberInvitationSeeder

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

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

第三步

composer dump-autoload

第四步

php artisan db:seed

这应该可以工作


如果这不是线索,请检查 composer.json 文件并确保您在“自动加载”部分中有以下代码:

"classmap": [
    "database"
],

【讨论】:

  • 运行“composer dump-autoload”只是我需要做的事情。
  • 这应该是公认的答案,当前的答案是基于错误的结论或知识缺失。
  • 很酷但有点 OT:您可以使用您的模型来播种数据库。而不是DB::table('my_foos')-&gt;insert(['col1' =&gt; 'Value 1']) 使用MyFoos::create(['col1' =&gt; 'Value1'])。好处是,自动维护的created_atupdated_at 正在为您填写。使用 DB::table('x')-&gt;insert() 时,它们是空的。
【解决方案2】:

我遇到了类似的错误,但我使用的是 DB 外观 DB::table 而不是模型。我发布答案以防万一有人遇到类似问题。

种子文件有命名空间namespace Database\Seeders;,而laravel试图在命名空间内寻找数据库类,因此出现了错误。

Class 'Database\Seeders\DB' not found.

决议:

  • 删除命名空间并运行composer dump-autoload
  • \DB::table('stock_categories')-&gt;([ ... ]); 添加一个反斜杠,以便 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
    ] );

【讨论】:

    【解决方案3】:

    如果你想使用字符串作为参数,你应该包含命名空间

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

    【讨论】:

    • 种子文件的路径无需添加。 $this-&gt;call([MemberInvitationSeeder::class]);这个就够了
    • 你的方法就够了,我同意,但我的也行。只是一种选择
    【解决方案4】:

    这对我有用

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

    【讨论】:

      【解决方案5】:

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

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

      如果命名空间是 App 这样的例子,这个解决方案不适合你。

      否则,使用您找到的命名空间并将该行插入到播种器类中:

      use NameSpaceFound\User;
      

      【讨论】:

        【解决方案6】:

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

        <?php
        use Illuminate\Database\Seeder;
        use Illuminate\Database\Eloquent\Model;
        use App\YourClassName;
        

        【讨论】:

          【解决方案7】:

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

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

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

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

          【讨论】:

          • 查看您的 composer.json 文件。在autoload 部分,您应该看到它在哪里设置classmap,并且它应该在数组中有"database",它告诉作曲家将该文件夹中的所有内容添加到自动加载器。如果它不在那里,那是你的问题。如果它在那里,尝试composer self-update 然后composer dump 看看是否有帮助。
          猜你喜欢
          • 1970-01-01
          • 2018-04-11
          • 2015-07-17
          • 1970-01-01
          • 1970-01-01
          • 2016-01-11
          • 1970-01-01
          • 2015-10-20
          • 2016-07-06
          相关资源
          最近更新 更多