Illuminate\Contracts\Container\BindingResolutionException



所以我在种子设定方面遇到了问题,第一次出现这个错误时,我想文件和表的名称可能不一样。我试着查找它,我在laravel 8中的这个链接中发现了种子,我有这个问题Target类[TableSeeder]不存在,它说要编辑从Database\Seeds到Database\Seeders的命名空间,但这不是问题,因为它已经正确了。它说要检查composer.json的自动加载并将Seeds更改为Seeders。。。

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

但我也有和他们建议的完全一样的东西。之后,一些人还建议进行composer dump自动加载,这就是结果。。。。

Generating optimized autoload files
Class AppHttpRequestsUpdaUserRequest located in appHttpRequestsUpdateUserRequest.php does not comply with psr-4 autoloading standard. Skipping.                            
> IlluminateFoundationComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
INFO  Discovering packages.
jenssegers/agent ............................ DONE  
laravel/fortify ............................. DONE  
laravel/jetstream ........................... DONE  
laravel/sail ................................ DONE  
laravel/sanctum ............................. DONE  
laravel/tinker .............................. DONE  
livewire/livewire ........................... DONE  
nesbot/carbon ............................... DONE  
nunomaduro/collision ........................ DONE  
nunomaduro/termwind ......................... DONE  
spatie/laravel-ignition ..................... DONE  
Generated optimized autoload files containing 5496 classes

我试着再次播种,它给了我这个。。。。

php artisan db:seed   
INFO  Seeding database.

IlluminateContractsContainerBindingResolutionException 
Target class [DatabaseSeedersPermissionTableSeeder] does not exist.
at vendorlaravelframeworksrcIlluminateContainerContainer.php:877
873▕
874▕         try {
875▕             $reflector = new ReflectionClass($concrete);
876▕         } catch (ReflectionException $e) {   

如果有人能帮助我,我非常感谢任何能帮助我的人。这是我的DatabaseSeeder.php…

<?php
namespace DatabaseSeeders;
// use IlluminateDatabaseConsoleSeedsWithoutModelEvents;
use IlluminateDatabaseSeeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call([
PermissionTableSeeder::class,
RolesTableSeeder::class,
PermissionRoleTableSeeder::class,
UsersTableSeeder::class,
RoleUsersTableSeeder::class,
]);
}
}

这是PermissionsTableSeeder.php…

<?php
namespace DatabaseSeeders;
use IlluminateDatabaseConsoleSeedsWithoutModelEvents;
use IlluminateDatabaseSeeder;
class PermissionsTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$permissions = [
[
'id'    => 1,
'title' => 'user_access',
],
[
'id'    => 2,
'title' => 'task_access',
],
];
Permissions::insert($permissions);
}
}

我得到了答案,所以首先显然表种子程序的名称是不对的。然后我犯了这个错误。。。

Error 
Class "DatabaseSeederspermissions" not found
at databaseseedersPermissionsTableSeeder.php:28
24▕                 'title' => 'task_access',
25▕             ],
26▕         ];
27▕
➜  28▕         permissions::insert($permissions);
29▕     }
30▕ }
31▕

我在网上搜索后发现了这个https://laracasts.com/discuss/channels/laravel/laravel-8-class-databaseseedersdb-not-found.所以我读了答案,所以你需要在你的表种子程序中添加use IlluminateSupportFacadesDB;,这样它就可以调用数据库来让它工作。所以现在我的PermissionsTableSeeder.php看起来是这样的,它运行得很好。

<?php
namespace DatabaseSeeders;
use IlluminateDatabaseConsoleSeedsWithoutModelEvents;
use IlluminateDatabaseSeeder;
use IlluminateSupportFacadesDB;
class PermissionsTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$permissions = [
[
'id'    => 1,
'title' => 'user_access',
],
[
'id'    => 2,
'title' => 'task_access',
],
];
DB::table('permissions')->insert($permissions);
}
}

相关内容

  • 没有找到相关文章

最新更新