環境
Laravel v9.5.1 (PHP v8.1.3)
状況
Userのrole
をenumを使って返していたのでてっきりinteger
で返ると思っていたら、JSONの返り値が文字列になっていた。
namespace App\Enums;
enum UserRole: int
{
case Owner = 1;
case Admin = 2;
case Member = 3;
}
{
"id": 1,
"name": "山田太郎",
"avatar": "https://www.gravatar.com/avatar/xxxxxxxxx",
"role": "2"
}
原因はmigrationファイルでroleをstring
にしており、JSONではDBから引っ張ってきているため文字列で返っていた。
解決法
Userモデルに下記を追記する。
app/Models/User.php
protected $casts = [
'role' => 'integer'
];
参考