所以我在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);
}
}
答案 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&I
</td>
<td>sgfdg</td>
<td>19</td>
<td>1</td>
<td>5.26%</td>
</tr>
<tr>
<td>dsgfdg</td>
<td>I&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';