在 Eloquent 中返回和访问 JSON 字段

问题描述 投票:0回答:2

我有一个名为 EmploymentApplication 的模型,当有人提交申请时,它使用 JSON 字段来保存所有提交的表单数据。该字段简称为“数据”。我正在研究资源控制器的“索引”方法。我只想返回 id、名字和姓氏(位于“数据”JSON 字段内)。

我正在尝试在 Tinker 中解决它(目前数据库中只有一个应用程序):

$result = \App\Models\EmploymentApplications\EmploymentApplication::all(['id', 'data->fname', 'data->lname'])

返回:

Illuminate\Database\Eloquent\Collection {#888
 all: [
   App\Models\EmploymentApplications\EmploymentApplication {#881
     id: 1,
     `data`->'$."fname"': ""Betty"",
     `data`->'$."lname"': ""Sue"",
   },
 ],

}

所以,它返回了正确的数据。让我困惑的部分是如何从这里访问 data->fname 和 data->lname。

$result[0]->id
效果很好。

$result[0]->(backtick)data(backtick)->'$."lname"'

抛出:

PHP 解析错误:语法错误,意外的“`”,第 1 行需要 T_STRING 或 T_VARIABLE 或“{”或“$”

访问这些属性的正确方法是什么?

我知道我可以在从控制器返回结果之前使用 array_map 来清理结果,但是这里的最佳实践是什么?

谢谢你。

php laravel-5
2个回答
1
投票

使用列别名:

$result = EmploymentApplication::all(['id', 'data->fname as fname', 'data->lname as lname']);
$result[0]->fname
$result[0]->lname

0
投票

我不确定这是否是你的意思,但如果我正在使用 tinker 并且想从我的数据库中获取信息,这就是我使用的。

DB::select("SELECT id, fname, lname FROM EmploymentApplication")

或者如果您正在寻找特定的 ID。

DB::select("SELECT id, fname, lname FROM EmploymentApplication WHERE id=1")
© www.soinside.com 2019 - 2024. All rights reserved.