在Eloquent中返回和访问JSON字段

时间:2018-08-11 01:58:26

标签: laravel-5

我有一个名为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清理结果,但是这里的最佳实践是什么?

谢谢。

2 个答案:

答案 0 :(得分:1)

使用列别名:

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

答案 1 :(得分:0)

我不确定这是否是您的意思,但是如果我使用修补程序,并且想从数据库中获取信息,这就是我的用途。

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

或者如果您要查找特定的ID。

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