我正在构建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
答案 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以指定哪些属性可见。