获取Illuminate \ Contracts \ Container \ BindingResolutionException:目标类[AdminsTableSeeder]不存在。错误

时间:2019-10-12 12:41:25

标签: laravel

所以我在laravel 6.1中创建了一个播种机,但我一直收到此错误Illuminate \ Contracts \ Container \ BindingResolutionException:目标类[AdminsTableSeeder]不存在。我尝试运行composer dump-autoload和composer dumpautoload,这些解决方案我在Internet上到处都可以找到,但是不知何故,它对我不起作用。任何人都可以帮助解决此错误。在过去的两个小时中,我一直在尝试解决此错误,非常感谢您的帮助。此外,我对laravel还是陌生的。 这是我的AdminsTableSeeder.php

use App\Models\Admin;
use Faker\Factory as Faker;
use Illuminate\Database\Seeder;

class AdminsTableSeeder extends Seeder
{
/**
 * Run the database seeds.
 *
 * @return void
 */
public function run()
{
    $faker = Faker::create();

    Admin::create([
        'name'      =>  $faker->name,
        'email'     =>  'admin@admin.com',
        'password'  =>  bcrypt('password'),
    ]);
}
}

这是我的DatabaseSeeder.php        

 use Illuminate\Database\Seeder;

 class DatabaseSeeder extends Seeder
 {
/**
 * Seed the application's database.
 *
 * @return void
 */
public function run()
{
   $this->call(AdminsTableSeeder::class);
}
}

9 个答案:

答案 0 :(得分:2)

您的情况是,将所有种子源文件从先前的database/seeds目录移至database/seeders文件夹,然后运行composer dump-autoload


请记住,来自 laravel 8 的播种者和工厂均已命名空间

为适应这些变化,

[1]-向您的种子类添加Database\Seeders名称空间。

 namespace Database\Seeders;

[2]-将所有种子文件移至database/seeders文件夹。

[3]-如果在DatabaseSeeder文件中导入任何播种器类,则将其全部删除。 (只需从DatabaseSeeder.php 中删除所有以 use Database\Seeders\... 开头的行)

[4]-最终运行dump-autoload

composer dump-autoload

您现在可以尝试使用种子重新迁移,

php artisan migrate:fresh --seed

答案 1 :(得分:1)

在我的情况下,目标Controller类缺少以下行

use Illuminate\Http\Request;

答案 2 :(得分:1)

好像控制器名称在 Laravel 8 中是区分大小写的。所以我的建议是仔细检查控制器名称。

例如: 在 web.php 中避免调用

UserAPIController

作为

UserApiController

(API 作为 api)

它可能会修复这个错误。

答案 3 :(得分:1)

对于我的情况(我使用 Laravel 8),我通过修改 App/Providers/ 路径中的 RouteServiceProvider.php 文件解决了我的问题。我在第 29 行取消注释代码。

<thead>
    <tr>
      <th rowspan="2" class="col-common-width">fsfs</th>
      <th rowspan="2" class="col-common-width">sfsdf</th>
      <th rowspan="2" class="col-common-width">sfdsf</th>
      <th rowspan="2" class="col-common-width">fadsf</th>
      <th rowspan="2" class="col-common-width">fsaf</th>
      <th rowspan="2" class="col-common-width">ssafsd</th>
    </tr>
  </thead>
  <tbody>
                  <tr> 
          <td>sfas</td>
          <td>sfsfs
</td>
          <td>dsfsdf</td>
          <td>sgdg</td>
          <td>gsd</td>
          <td>dg</td>
        </tr>
              <tr> 
          <td>gsdf</td>
          <td>sgd
</td>
          <td>gsdf</td>
          <td>487</td>
          <td>442</td>
          <td>90.76%</td>
        </tr>
              <tr> 
          <td>fsgfd</td>
          <td>I&amp;I
</td>
          <td>sgfdg</td>
          <td>19</td>
          <td>1</td>
          <td>5.26%</td>
        </tr>
              <tr> 
          <td>dsgfdg</td>
          <td>I&amp;I
</td>
          <td>dsgdf</td>
          <td>5,890</td>
          <td>3,707</td>
          <td>62.94%</td>
        </tr>
              <tr> 
          <td>gsdfg</td>
          <td>gdfg
</td>
          <td>gdsgf</td>
          <td>dfgdf</td>
          <td>88</td>
          <td>26.27%</td>
        </tr>
              <tr> 
          <td>dgdf</td>
          <td>IM
</td>
          <td>dgd</td>
          <td>4,998</td>
          <td>4,528</td>
          <td>90.60%</td>
        </tr>
              <tr> 
          <td>dgdf</td>
          <td>gdf
</td>
          <td>gsdf</td>
          <td>464</td>
          <td>30</td>
          <td>6.47%</td>
        </tr>
              <tr> 
          <td>dfgdf</td>
          <td>dgdfg
</td>
          <td>dfgd</td>
          <td>10,926</td>
          <td>5,762</td>
          <td>52.74%</td>
        </tr>
              <tr> 
          <td>dfgdf</td>
          <td>dfgdf
</td>
          <td>dgdf</td>
          <td>5</td>
          <td>4</td>
          <td>80.00%</td>
        </tr>
              <tr> 
          <td>dfgdf</td>
          <td>dfgdf
</td>
          <td>dgdf</td>
          <td>1,418</td>
          <td>1,091</td>
          <td>76.94%</td>
        </tr>
              <tr> 
          <td>gdfg</td>
          <td>gdgd
</td>
          <td>gsdf</td>
          <td>265</td>
          <td>121</td>
          <td>45.66%</td>
        </tr>
              <tr> 
          <td>dgdFgdfMD</td>
          <td>gdf
</td>
          <td>HCPs</td>
          <td>1,348</td>
          <td>1,155</td>
          <td>85.68%</td>
        </tr>
              <tr> 
          <td>dgsdf</td>
          <td>Igdfg
</td>
          <td>dfgdfg</td>
          <td>708</td>
          <td>649</td>
          <td>91.67%</td>
        </tr>
              <tr> 
          <td>Total</td>
          <td></td>
          <td></td>
          <td>26,9fg48</td>
          <td>17,6g48</td>
          <td>65.4fg9%</td>
        </tr>
            </tbody>

它对我有用。

答案 4 :(得分:0)

确保AdminsTableSeeder.php文件与DatabaseSeeder.php文件位于同一目录。

运行

composer dump-autoload

然后尝试

php artisan db:seed

可选。

像这样尝试$this->call('AdminsTableSeeder');

答案 5 :(得分:0)

对于 Laravel ^7.0

如果你使用 Laravel Eloquent

示例:

<?php

use App\Models\User;
use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
    public function run()
    {
        $users = [
            [
                'id'             => 1,
                'name'           => 'Admin',
                'email'          => 'admin@admin.com',
                'password'       => bcrypt('password'),
                'remember_token' => null,
            ],
        ];

        User::insert($users);
    }
}

如果您使用 Laravel 查询生成器

示例:

<?php

//Do not use -> namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class UsersTableSeeder extends Seeder
{
    public function run()
    {
        DB::table('users')->insert([
            'name'           => 'Admin',
            'email'          => 'admin@admin.com',
            'password'       => bcrypt('password'),
            'remember_token' => null,
        ]);
    }
}

在你的 DatabaseSeeder.php 中

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    public function run()
    {
        $this->call([
            UsersTableSeeder::class,
        ]);
    }
}

答案 6 :(得分:0)

在您的 DatabaseSeeder.php 中,您可以为 AdminsTableSeeder 添加名称空间,例如 -

use App\Models\Admin\AdminsTableSeeder;

答案 7 :(得分:0)

对于 Laravel 8:

我遇到了同样的问题,我在 Laravel 文档中找到了一个解决方案,它对我有用。

https://laravel.com/docs/8.x/upgrade#seeder-factory-namespaces

更新作曲家:

"autoload": {
    "psr-4": {
        "App\\": "app/",
        "Database\\Factories\\": "database/factories/",
        "Database\\Seeders\\": "database/seeders/"
    }
}

运行:

composer dumpautoload

php artisan db:seed --force

答案 8 :(得分:0)

关于我的情况,我使用了最新版本的 Laravel 8,我通过取消第 29 行代码的注释来更改 App/Providers/ 路径中的 RouteServiceProvider.php 文件解决了我的问题。

受保护的 $namespace = 'App\Http\Controllers';