[英]Why can't Laravel find the Voyager Seeder?
我正在我的項目中進行遷移,而不是運行php artisan migrate
我運行了php artisan migrate:fresh
然后清除了我所有的表和其中的數據。 現在我的數據庫有所有空白表,但是當我再次嘗試播種時遇到了問題。 我可以用我制作的播種機播種,但我也在使用 voyager,我無法運行 voyager 播種機。
voyager 文檔說我應該運行這個命令來運行 voyager 表的種子:
php artisan db:seed --class=VoyagerDatabaseSeeder
但是當我運行它時,它給了我以下錯誤:
Illuminate\Contracts\Container\BindingResolutionException
Target class [Database\Seeders\VoyagerDatabaseSeeder] does not exist.
at vendor/laravel/framework/src/Illuminate/Container/Container.php:835
831▕
832▕ try {
833▕ $reflector = new ReflectionClass($concrete);
834▕ } catch (ReflectionException $e) {
➜ 835▕ throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e);
836▕ }
837▕
838▕ // If the type is not instantiable, the developer is attempting to resolve
839▕ // an abstract type such as an Interface or Abstract Class and there is
+23 vendor frames
24 artisan:37
Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
這就是我的目錄的布局方式:
您可以看到VoyagerDatabaseSeeder.php
確實存在,但由於某種原因,laravel 不能播種? 有任何想法嗎?
------------ 評論 [作曲家轉儲自動加載] -------------
這是composer dump-autoload
的結果:
mobile-mastery-latest git:(enhancement/auth-user) ✗ composer dump-autoload
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: arrilot/laravel-widgets
Discovered Package: bumbummen99/shoppingcart
Discovered Package: cartalyst/stripe-laravel
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: fruitcake/laravel-cors
Discovered Package: intervention/image
Discovered Package: larapack/doctrine-support
Discovered Package: larapack/voyager-hooks
Discovered Package: laravel/tinker
Discovered Package: laravel/ui
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Discovered Package: tcg/voyager
Package manifest generated successfully.
Generated optimized autoload files containing 5855 classes
➜ mobile-mastery-latest git:(enhancement/auth-user) ✗ php artisan db:seed --class=VoyagerDatabaseSeeder
Illuminate\Contracts\Container\BindingResolutionException
Target class [Database\Seeders\VoyagerDatabaseSeeder] does not exist.
at vendor/laravel/framework/src/Illuminate/Container/Container.php:835
831▕
832▕ try {
833▕ $reflector = new ReflectionClass($concrete);
834▕ } catch (ReflectionException $e) {
➜ 835▕ throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e);
836▕ }
837▕
838▕ // If the type is not instantiable, the developer is attempting to resolve
839▕ // an abstract type such as an Interface or Abstract Class and there is
+23 vendor frames
24 artisan:37
Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
------------ 評論[添加use
聲明] -------------
這是航海者播種機:
<?php
use Illuminate\Database\Seeder;
use TCG\Voyager\Traits\Seedable;
class VoyagerDatabaseSeeder extends Seeder
{
use Seedable;
protected $seedersPath = __DIR__.'/';
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->seed('DataTypesTableSeeder');
$this->seed('DataRowsTableSeeder');
$this->seed('MenusTableSeeder');
$this->seed('MenuItemsTableSeeder');
$this->seed('RolesTableSeeder');
$this->seed('PermissionsTableSeeder');
$this->seed('PermissionRoleTableSeeder');
$this->seed('SettingsTableSeeder');
}
}
所以我們偶然發現了這個問題,我們只能找到解決方法。
看起來在 Laravel 中創建了 7 個播種器,沒有命名空間,就像 Voyager 的播種器一樣。 但 Laravel 8 的情況並非如此。現在,Laravel 正在namespace Database\Seeders;
- 因此,當您嘗試運行php artisan db:seed --class=VoyagerDatabaseSeeder
時,它將無法找到它,因為它不在它正在尋找的命名空間中。
將 Voyager 播種機移動到“播種機”文件夾 - 與 Laravel 8 播種機相同的文件夾 - 並添加適當的命名空間( Database\Seeders
)似乎解決了我們的問題(我認為移動它們是沒有必要的,但我們這樣做是為了保持項目清潔)。
我們現在可以使用該命令,並像使用任何其他播種機一樣使用 Voyager 播種機。
請注意,我不是一位經驗豐富的工程師,也不是 Voyager 的經驗,所以請對這個解決方案持保留態度,並原諒我在答案中可能存在的不准確之處:)
首先運行這個命令
php artisan voyager:install --with-dummy
此命令創建開始使用 Voyager 所需的所有表和角色
然后運行下面的命令
composer dump-autoload
然后運行你的命令
php artisan db:seed --class=VoyagerDatabaseSeeder
1. 運行: composer dump-autoload 2. 運行: php artisan voyager:install --with-dummy
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.