所以我在种子设定方面遇到了问题,第一次出现这个错误时,我想文件和表的名称可能不一样。我试着查找它,我在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);
}
}