多对多关联查询问题,起别名

大家好,帮忙看个多对多查询的问题,谢谢。多对多查询出来的数据起别名的问题,不要用join查询,直接用model获取。现在查出来的数据是 {
"id": 114,
"name": "aaaa111",
"phone": "",
"address": "",
"class_id": "4",这个id为图片的id
"img": [
{
"id": 4,
"origin_name": "默认头像.jpg",
"local_path": "/upload/14d4aaf3c5ef5b93e6c4c7418428ea71.jpg",
"local_name": "14d4aaf3c5ef5b93e6c4c7418428ea71.jpg",
"pivot": {
"building_id": 114,
"picture_id": 4
}
}
现在返回是这种形式的,但是前端要求是:
"id": 114,
"name": "aaaa111",
"phone": "",
"address": "",
"class_id": "4",这个id为图片的id
"class_name": "默认头像.jpg",
"image_path": "/upload/14d4aaf3c5ef5b93e6c4c7418428ea71.jpg",
,这种形式的。该怎么做呢。谢谢大家
更多 0
已邀请:

zhuzhichao

赞同来自: 吃奶的牛 FiveSay 雨师 denise

自己写一个函数处理一下数据即可。
  1. 如果喜欢封装在model里
    public static function infoReformat($obj) {
    return [
        "id"=> $obj->id,
        "name"=> $obj->name,
        "phone"=> $obj->phone,
        "address"=> $obj->address,
        "class_id"=> $obj->img->id,
        "class_name"=> $obj->img->origin_name,
        "image_path"=> $obj->img->local_path,
    ];
    }

    接着在Controller里这样用 return Response::json(YourModel::infoReformat($obj));
  2. 如果喜欢封装在Controller里
    public function infoReformat($obj) {
    return Response::json([
        "id"=> $obj->id,
        "name"=> $obj->name,
        "phone"=> $obj->phone,
        "address"=> $obj->address,
        "class_id"=> $obj->img->id,
        "class_name"=> $obj->img->origin_name,
        "image_path"=> $obj->img->local_path,
    ]);
    }

zhuzhichao

赞同来自: 吃奶的牛 FiveSay denise

如果是获取器和设置器的话。
public function getImagePathAttribute($value) {
    return $this->img->local_path;
}

public function setImagePathAttribute($value) {
    return $this->img->attributes['local_path'] = $value;
}

其实这样做虽然能用。但是我个人感觉程序可读性不太好,不建议这样操作,毕竟获取器和设置器应该对应这个表的字段操作,而不是对其他表内容映射到这表。

FiveSay - 成武

赞同来自: 吃奶的牛 zhuowenji

@lavaral真垃圾:
初学切不可妄下结论,且不说别的,你觉得 tp 的作者敢不敢说 laravel 垃圾呢?
我很感谢 thinkphp,是他带我入门,在很长的一段时间我都在使用他,从 2.0 一直到 3.1.2。
但他真的惯坏了很多人,从“M() 函数”到“蹩脚的路由(这个在设计之初还是引以为豪的)”可以列举的还有很多。
thinkphp 培养了很多强者,但强者绝不止步于 thinkphp!
用户名还是希望改掉,这样的名字出现在这里真的不合时宜,如果没有权限的话可以给我私信。

@zhuzhichao 感谢你认真的解答。

突破

赞同来自:

laravel中文资料确实很少,视频也很少,我觉得基础好,用什么框架都一样

要回复问题请先登录注册