Laravel 的 ORM 将关联表的指定属性摊开

return  Task::with(['cate:id,name'])
            ->select(['cate_id','title'])
            ->simplePaginate();

上面的查询会返回如下数据

        [
            {
                "cate_id": 1,
                "title": "11111",
                "cate": {
                    "id": 1,
                    "name": "分类1"
                }
            },
            ...
        ]

期望生成如下格式,不知这个能否实现?还是需要手动遍历数据重组

        [
            {
                "cate_id": 1,
                "title": "11111",
                "cate_name": "分类1"
            },
            ...
        ]
所幸无碍
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

迫于前端也是这样要求,我的做法是使用dingoTransformers返回响应,例如

return [
  'id' => $task->id,
  'cate_name' => $task->cate->name, 
];
4年前 评论
expectedSelf (楼主) 4年前
讨论数量: 6

不建议吧,,,

tasks[0].cate.name 这样不是很好么,层次清晰,,关系也清晰

4年前 评论
ibucoin

可以用resource来重新组数据,不然只能用join来做了。

4年前 评论

迫于前端也是这样要求,我的做法是使用dingoTransformers返回响应,例如

return [
  'id' => $task->id,
  'cate_name' => $task->cate->name, 
];
4年前 评论
expectedSelf (楼主) 4年前
自由与温暖是遥不可及的梦想

用访问器来解决 访问器文档

4年前 评论

public function getCateIdAttribute(){
    return $this->cate->id;
}
4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!