toJSONが間違った値を返すのはなぜですか

Byakku

次を実行した場合:

App\User::selectRaw('country as id, COUNT(*) as value')->groupBy('country')->get()

正しい出力が得られます:

all: [ App\User {#705 id: "UK", value: 2,},],}

しかし、私が走ると

App\User::selectRaw('country as id, COUNT(*) as value')->groupBy('country')->get()->toJSON()

id 値を 0 に反転しているようです。

[{"id":0, "value":2}]

ここで興味深いのは、国フィールドにエイリアスを付けないように変換すると、正しい出力が得られることです。

[{"country":"UK", "value":2}]

フィールドを id として返す必要がありますが、なぜこれを行うのか理解できないようです

パトリキ

toJson()モデルを呼び出すときに$incrementingプロパティがの場合true、Laravelは自動的に$primaryKeyフィールドを$keyTypeタイプにキャストしようとします。これらの値のいずれもオーバーライドしていない場合は、jsonの生成中にidフィールドがにキャストされることを意味しますint

選択では、countryフィールドにという名前を付けたidので、json を生成するときに、この値 ( UK) をにキャストしようとしますがint、これはもちろん 0 です。

selectステートメントを変更してフィールドid名前を付けないようにするか、の呼び出しの前後にモデルプロパティを変更するかtoJson()getCasts()メソッドをオーバーライドしてこの機能を完全に回避するなど、さまざまな方法でこの機能を回避できます。

編集

コードベースやユースケースを知らなくても、最も柔軟な解決策はApp\User、次のような新しいメソッドをモデルに追加することです。

public function toJsonCustom($options = 0)
{
    $incrementing = $this->getIncrementing();

    $this->setIncrementing(false);

    $json = $this->toJson($options);

    $this->setIncrementing($incrementing);

    return $json;
}

次に、元の toJson メソッドの代わりにカスタムの toJson メソッドを呼び出します。

App\User::selectRaw('country as id, COUNT(*) as value')
    ->groupBy('country')
    ->get()
    ->toJsonCustom();

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

このasmstrcmp()が間違った値を返すのはなぜですか

分類Dev

「col」変数が間違った値を返すのはなぜですか

分類Dev

INDEX / MATCH関数が間違った値を返すのはなぜですか?

分類Dev

コードが間違った値を返すのはなぜですか?

分類Dev

GregorianCalendar.getTimeInMillis()が間違った値を返すのはなぜですか?

分類Dev

BinaryReader.ReadDecimal()が間違った値を返すのはなぜですか?

分類Dev

Number()が非常に大きな整数で間違った値を返すのはなぜですか?

分類Dev

roundf()がfloat値を丸めないのはなぜですか?また、int-float数学演算が間違った値を返すのはなぜですか?

分類Dev

「==」と比較して「is」を使用すると、np.allが間違った値を返すのはなぜですか?

分類Dev

再帰的なdfs関数が間違った値を返すのはなぜですか?

分類Dev

forkJoinがオブザーバブルから間違った値を返すのはなぜですか?

分類Dev

{pf32}がInnoSetupで間違った値を返すのはなぜですか?

分類Dev

次のコードが間違ったカウント値を返すのはなぜですか?

分類Dev

MATLABのrgb2hsvが間違った色相値を返すのはなぜですか?

分類Dev

Cの罪計算コードが間違った値を返すのはなぜですか?

分類Dev

この再帰関数が間違った値を返すのはなぜですか?

分類Dev

クエリが間違った結果を返すのはなぜですか?

分類Dev

If条件が間違った結果を返すのはなぜですか?

分類Dev

COUNTが間違った番号を返すのはなぜですか?

分類Dev

Scipy stdDevが間違った結果を返すのはなぜですか?

分類Dev

統計が間違った結果を返すのはなぜですか?

分類Dev

forEach関数が間違った出力を返すのはなぜですか?

分類Dev

DataFrame.locが間違った行を返すのはなぜですか?

分類Dev

選択ドロップダウンが間違った値を返すのはなぜですか?

分類Dev

localstorageが間違った値を保存するのはなぜですか?

分類Dev

memsetが間違った値を設定するのはなぜですか?

分類Dev

printfが間違った値を出力するのはなぜですか?

分類Dev

なぜslice :: binary_searchが間違った結果を返すのですか?

分類Dev

<>またはNOTIN、およびクエリが間違った結果を返すのはなぜですか

Related 関連記事

  1. 1

    このasmstrcmp()が間違った値を返すのはなぜですか

  2. 2

    「col」変数が間違った値を返すのはなぜですか

  3. 3

    INDEX / MATCH関数が間違った値を返すのはなぜですか?

  4. 4

    コードが間違った値を返すのはなぜですか?

  5. 5

    GregorianCalendar.getTimeInMillis()が間違った値を返すのはなぜですか?

  6. 6

    BinaryReader.ReadDecimal()が間違った値を返すのはなぜですか?

  7. 7

    Number()が非常に大きな整数で間違った値を返すのはなぜですか?

  8. 8

    roundf()がfloat値を丸めないのはなぜですか?また、int-float数学演算が間違った値を返すのはなぜですか?

  9. 9

    「==」と比較して「is」を使用すると、np.allが間違った値を返すのはなぜですか?

  10. 10

    再帰的なdfs関数が間違った値を返すのはなぜですか?

  11. 11

    forkJoinがオブザーバブルから間違った値を返すのはなぜですか?

  12. 12

    {pf32}がInnoSetupで間違った値を返すのはなぜですか?

  13. 13

    次のコードが間違ったカウント値を返すのはなぜですか?

  14. 14

    MATLABのrgb2hsvが間違った色相値を返すのはなぜですか?

  15. 15

    Cの罪計算コードが間違った値を返すのはなぜですか?

  16. 16

    この再帰関数が間違った値を返すのはなぜですか?

  17. 17

    クエリが間違った結果を返すのはなぜですか?

  18. 18

    If条件が間違った結果を返すのはなぜですか?

  19. 19

    COUNTが間違った番号を返すのはなぜですか?

  20. 20

    Scipy stdDevが間違った結果を返すのはなぜですか?

  21. 21

    統計が間違った結果を返すのはなぜですか?

  22. 22

    forEach関数が間違った出力を返すのはなぜですか?

  23. 23

    DataFrame.locが間違った行を返すのはなぜですか?

  24. 24

    選択ドロップダウンが間違った値を返すのはなぜですか?

  25. 25

    localstorageが間違った値を保存するのはなぜですか?

  26. 26

    memsetが間違った値を設定するのはなぜですか?

  27. 27

    printfが間違った値を出力するのはなぜですか?

  28. 28

    なぜslice :: binary_searchが間違った結果を返すのですか?

  29. 29

    <>またはNOTIN、およびクエリが間違った結果を返すのはなぜですか

ホットタグ

アーカイブ