将表字段作为单个JSON对象连接

时间:2017-01-10 21:49:29

标签: php laravel laravel-5.2

我正在构建API。我在构建响应时遇到了问题:

{
    "id": 1,
    "name": "Some name",
    "my_joined_table": {
        "joined_table_id": "10",
        "some_joined_table_field": "some value"
    }
},

https://laravel.com/docs/5.2/queries中所述加入表将产生如下结果:

{
    "id": 1,
    "name": "Some name",
    "joined_table_id": "10",
    "some_joined_table_field": "some value"
},

而不是使用join我可以只运行两个查询,一个用于主表,第二个用于辅助,然后只是将第二个数组追加到第一个并吐出JSON响应,但它有很多查询并附加了列表太大了!

在伪代码中产生第二个结果的示例代码:

$data = Model::select('id', 'name', 'my_joined_table.id as joined_table_id', 'my_joined_table.some_value some_value')
->leftJoin('my_joined_table', function($join) { //conditions_callback 
})->get();
return response()->json($data);

请建议。

EDIT2:

我似乎可以使用with,如下所示:

$data = Model::with('my_second_table')->first();
return response()->json($data);

除非我在->first($fields)中指定第二个表的主键,否则我无法使用->with(['my_second_table' => function ($query) { $query->select('id', 'some_value'); }])->first($fields)来执行我想要的,只有问题,我无法为第一个和第二个表指定字段。我该如何解决这个问题?

TL; DR;问题:http://laravel.io/bin/YyVjd

1 个答案:

答案 0 :(得分:0)

您可以使用Laravel Eloquent关系来实现它。 https://laravel.com/docs/5.2/eloquent-relationships#one-to-many

或者您可以使用$ append将返回的数据重新映射到新的响应对象。 在这里尝试一下, http://laraveldaily.com/why-use-appends-with-accessors-in-eloquent/

这只是一些线索,还有很多工作要做。

仅供参考,您可以在模型中设置$ visible以指定哪些属性可见。