JSONへのシリアル化時に属性名で番号を持つアクセサーを走らない
私は最近、LALAVELがJSONに私の雄弁なモデルを直列化するとき、アクセサーを実行していなかった問題に出くわしました.私には1つの財産があった
私はモデルにこれらの文字列を適切なブール値に変換するために以下のアクセサを追加しました.
私が言うことができる限り、このバグは
良いニュースは、解決可能な問題です.Laravel allows you to explicitly append values to JSON と
以下のモデルは次のようになります.
上記のコードから出力されたJSONシリアル出力です.
is_drop_off_location
そしてis_24_hour_drop_off_location
. これらの値は、BooleansをサポートしていないSQLiteデータベースに格納されており、JSONにモデルをシリアル化するときに"0"
or "1"
を文字列で返します.私はモデルにこれらの文字列を適切なブール値に変換するために以下のアクセサを追加しました.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Location extends Model
{
public function getIsDropOffLocationAttribute($value)
{
return $value == "1" ? true : false;
}
public function getIs24HourDropOffLocationAttribute($value)
{
return $value == "1" ? true : false;
}
}
しかし、JSONにシリアル化すると、次のようになります.{
"is_drop_off_location": true,
"is_24_hour_drop_off_location": "0"
}
見回すと、私はただ一人しかいなかったproblems with numbers and serialization .私が言うことができる限り、このバグは
StudlyCase
属性名snake_case
, そして、変換機能は、数の前にアンダースコアがあるということを知る方法がありません.良いニュースは、解決可能な問題です.Laravel allows you to explicitly append values to JSON と
protected $appends
Elququentモデルの性質この機能は、データベース列に対応しない動的な属性を追加するために存在しますが、Laravelは、その中の番号を持つ属性のアクセサをシリアル化することを保証するために使用できます.以下のモデルは次のようになります.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Location extends Model
{
// This will make Laravel serialize our accessor.
protected $appends = ['is_24_hour_drop_off_location'];
public function getIsDropOffLocationAttribute($value)
{
return $value == "1" ? true : false;
}
public function getIs24HourDropOffLocationAttribute($value)
{
return $value == "1" ? true : false;
}
}
私がこれをJSONに連載するとき、ラーラーベルはアクセサーを見るのを知っています.上記のコードから出力されたJSONシリアル出力です.
{
"is_drop_off_location": true,
"is_24_hour_drop_off_location": false
}
ハッピーコーディング.Reference
この問題について(JSONへのシリアル化時に属性名で番号を持つアクセサーを走らない), 我々は、より多くの情報をここで見つけました https://dev.to/tylerlwsmith/laravel-not-running-accessors-with-numbers-in-attribute-name-when-serializing-to-json-43dbテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol