如何修复命名空间枚举的类未找到错误?

Tam*_*mma 5 php laravel

enums在 Laravel 项目的根目录中手动创建了一个文件夹。目前,只有一个文件被调用TransactionTypes,我想在迁移中使用它(将来也在另一个文件中)。但是,当我测试该应用程序时,它会抛出错误。

Class "Enums\TransactionTypes" not found
Run Code Online (Sandbox Code Playgroud)

我使用这个枚举的迁移看起来像这样

<?php

use App\Models\Foodstuff;
use Enums\TransactionTypes;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('transactions', function (Blueprint $table) {
            $table->id();
            $table->foreignIdFor(Foodstuff::class);
            $table->enum('type', TransactionTypes::cases()); // HERE
            $table->unsignedInteger('stock');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('transactions');
    }
};

Run Code Online (Sandbox Code Playgroud)

我已经namespace在我的枚举中声明了 a

<?php

namespace Enums;

enum TransactionTypes
{
    case in;
    case out;
    case cancelled;
    case returned;
}

Run Code Online (Sandbox Code Playgroud)

我尝试执行sail composer dump-autoload但仍然不起作用。我该如何修复它?

Gui*_*lle 3

最好将 enums 文件夹放在应用程序文件夹中,可以将其更改为

app/Enums/TransactionTypes.php

其次,我建议对枚举类进行一些更改:

  • 将命名空间更改为App\Enums
  • 添加返回类型
  • 为案例添加价值
<?php

namespace App\Enums;

enum TransactionTypes: string
{
    case in = "in";
    case out = "out";
    case cancelled = "cancelled";
    case returned = "returned";
}
Run Code Online (Sandbox Code Playgroud)

三、运行sail composer dump-autoload