相关文章推荐
淡定的鸭蛋  ·  Azure App service get ...·  4 月前    · 
含蓄的炒饭  ·  UsageStatsManager.AppS ...·  6 月前    · 
失恋的牙膏  ·  WindowsAPI学习笔记三 - ...·  1 年前    · 

Laravel 運行 php artisan db:seed --class ***Seeder 始終報錯:Target class [****Seeder] does not exist.求解

laravel6.0 愛的code 2020-01-11 17:43:03 3750 瀏覽

結果顯示也正常

Generating optimized autoload files> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
Generated optimized autoload files containing 4077 classes

然後我執行db:seed

php artisan db:seed --class 88asSeeder

就一直報錯了如下:

  Illuminate\Contracts\Container\BindingResolutionException  : Target class [88asSeeder] does not exist.
  at C:\AppServ\www\3zzz\etk\vendor\laravel\framework\src\Illuminate\Container\Container.php:805
    802|         try {
    803|             $reflector = new ReflectionClass($concrete);
    804|         } catch (ReflectionException $e) {
  > 805|             throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e);
    806|         }
    808|         // If the type is not instantiable, the developer is attempting to resolve
    809|         // an abstract type such as an Interface or Abstract Class and there is
  Exception trace:
  1   ReflectionException::("Class 88asSeeder does not exist")
      C:\AppServ\www\3zzz\etk\vendor\laravel\framework\src\Illuminate\Container\Container.php:803
  2   ReflectionClass::__construct("88asSeeder")
      C:\AppServ\www\3zzz\etk\vendor\laravel\framework\src\Illuminate\Container\Container.php:803
  Please use the argument -v to see more details.

如上,有請哪位高手解迷津,幫幫忙!

我把 88asSeeder 改成 asSeeder後,報錯已經不一樣了如下:

   Symfony\Component\Debug\Exception\FatalThrowableError  : Call to undefined function Str_random()
  at C:\AppServ\www\3zzz\etk\database\seeds\asSeeder.php:19
    15|         $arr = [];
    16|         for ($i=0; $i <20 ; $i++) {
    17|                 # code...
    18|                 $tmp = [];
  > 19|                 $tmp['username'] = Str_random(20);
    20|                 $tmp['password'] = Str_random(20);
    21|                 $tmp['email'] = rand(100000, 9999999).'@gmail.com';
    22|                 $arr[] = $tmp;
    23|         }
  Exception trace:
  1   asSeeder::run()
      C:\AppServ\www\3zzz\etk\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php:32
  2   call_user_func_array([])
      C:\AppServ\www\3zzz\etk\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php:32
  Please use the argument -v to see more details.

可見似乎是 class 不存在的問題 已經好了,但新的問題是? 能否也指點一下迷津!謝謝!

我沒有定義 Str_random 、tr_random 或 任何函數,難道是我還需要引入甚麼嗎?

我使用 $tmp['email'] = rand(100, 9999).'@gmail.com';
想要產生一些亂數的 email ,也好像有問題,因為生成的資料如下圖:

在" @gmail.com" 之前的數字,怎麼都一樣 rand(100000, 9999999)
不是會從100000~9999999之間亂數產生嗎?

我使用 `$tmp['email'] = rand(100, 9999).'@gmail.com';` 想要產生一些亂數的 email ,也好像有問題,因為生成的資料如下圖: ![https://ithelp.ithome.com.tw/upload/images/20200111/2012175435kQ1JxITz.png](https://ithelp.ithome.com.tw/upload/images/20200111/2012175435kQ1JxITz.png) 在" @gmail.com" 之前的數字,怎麼都一樣 rand(100000, 9999999) 不是會從100000~9999999之間亂數產生嗎? $tmp = []; $tmp['username'] = $this::str_random(10); $tmp['password'] = $this::srand(0, 1); $tmp['email'] = $this::rand(100, 9999).'@gmail.com'; $arr[] = $tmp; DB::table('as')->insert($arr);

以後,變成報錯如下

  Symfony\Component\Debug\Exception\FatalThrowableError  : Call to undefined method asSeeder::str_random()
  at C:\AppServ\www\3zzz\etk\database\seeds\asSeeder.php:19
    15|         $arr = [];
    16|         for ($i=0; $i <20 ; $i++) {
    17|                 # code...
    18|                 $tmp = [];
  > 19|                 $tmp['username'] = $this::str_random(10);
    20|                 $tmp['password'] = $this::srand(0, 1);
    21|                 $tmp['email'] = $this::rand(100, 9999).'@gmail.com';
    22|                 $arr[] = $tmp;
    23|         }
        	$tmp = [];
        	$tmp['username'] = $this::str_random(10);
        	$tmp['password'] = $this::srand(0, 1);
        	$tmp['email'] = $this::rand(100, 9999).'@gmail.com';
        	$arr[] = $tmp;
        	DB::table('as')->insert($arr);
以後,變成報錯如下
  Symfony\Component\Debug\Exception\FatalThrowableError  : Call to undefined method asSeeder::str_random()
  at C:\AppServ\www\3zzz\etk\database\seeds\asSeeder.php:19
    15|         $arr = [];
    16|         for ($i=0; $i <20 ; $i++) {
    17|                 # code...
    18|                 $tmp = [];
  > 19|                 $tmp['username'] = $this::str_random(10);
    20|                 $tmp['password'] = $this::srand(0, 1);
    21|                 $tmp['email'] = $this::rand(100, 9999).'@gmail.com';
    22|                 $arr[] = $tmp;
    23|         }
                            

str_random 用得有問題的話 試試這個吧
https://laravel.com/docs/master/helpers#method-str-random
不過產生測試資料不是用 factory 更好嗎?
email 還會照格式幫你產生
此外,很多程式語言 class 名稱只接受大寫英文字母開頭,部分接受小寫,數字開頭幾乎沒見過

因為剛接觸 所以 factory 也還需要摸索一下, Seeder 先學會了有空再研究factory。

昨天經小魚大大提醒把表名去掉數字換成全英文後,找不到class 問題已經解決。
而剛剛我參考了f107110126提供的資料然後
將aaaSeeder中的 str_random 換成 str::random 如下:

composer dump-autoload
php artisan db:seed --class=aaaSeeder

結果完全OK如下圖:
真棒!感謝兩位賜教,令人感覺處處有溫情,溫暖技術圈。謝謝啦!