phpjsonlumen

Lumen PHP change field name in JSON


I have a table in my database with some fields:

When I call an API, I get one item from my database and return it:

$table = MyTable::select('table.*')->where('id', $id)->first();
return response()->json($table, 200);

I get a json like that:

{
  "id": 1,
  "name": "user1",
  "xx": 0
}

I can remove the xx field by adding it to he $hidden field inside the model.

How can I rename the xx in yy ? Does it exists a simpler way than adding a getter/setter on a yy field inside my model ?

To get:

{
  "id": 1,
  "name": "user1",
  "yy": 0
}

Solution

  • The first method is using setHidden and select alias like below :

    $table = MyTable::select('table.*', "table.xx as yy")->where('id', $id)->first()->setHidden(["xx"]);
    return response()->json($table, 200);
    

    Or you can map response using Associative Array but you have to map every fields like below :

    $table = MyTable::select('table.*')->where('id', $id)->first();
    return response()->json([
      "id" => $table->id,
      "name" => $table->name,
      "yy" => $table->xx
    ], 200);
    

    Or unset like below :

    $table = MyTable::select('table.*')->where('id', $id)->first()->toArray();
    $table["xx"] = $table["yy"];
    unset($table["yy"]);
    return response()->json($table, 200);