我有一个名为 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 来清理结果,但是这里的最佳实践是什么?
谢谢你。
使用列别名:
$result = EmploymentApplication::all(['id', 'data->fname as fname', 'data->lname as lname']);
$result[0]->fname
$result[0]->lname
我不确定这是否是你的意思,但如果我正在使用 tinker 并且想从我的数据库中获取信息,这就是我使用的。
DB::select("SELECT id, fname, lname FROM EmploymentApplication")
或者如果您正在寻找特定的 ID。
DB::select("SELECT id, fname, lname FROM EmploymentApplication WHERE id=1")