首页 > 解决方案 > 如何更改查询,使其仅显示名称而不是整个数组(laravel 8)

问题描述

我有一个查询将数据放入一个集合中,问题是它显示了外国 id,但我希望它显示我在 url 参数中给出的内容。

例如我得到这个:

"name": "george",
"active": 1,
"language": 1,

这就是我想要的:

"name": "george",
"active": 1,
"language": "Dutch",

这是我的代码:

public function index(Request $request){
    $columnsGiven = explode(',', $request->columns);
    $tableName = $request->table_name; //example: 'support_guide_translations'
    $modelName = $request->model_name; //example: "App\Models\SupportGuideTranslation";


    if($request->search){
        $query = $modelName::search($request->search);
    } else{
        $query = $modelName::query();
        if($request->sort){
            $sort = explode('?', $request->sort);
            $query->orderBy($sort[0], $sort[1]);
        }
    }
    foreach ($request->query() as $key => $value) {
        // dd($value);
        if(!$value == ""){
            if(Schema::hasColumn($tableName, $key)){
                $query->where($key, $value);
            }
            if(in_array($key, $columnsGiven)){
                dd('true');
            }
            //     $searchWord = Str::contains('account123',$request->search);
        }
    }

    $guides = $query->get();
    return GuideResource::collection($guides);
}
}

这是 GuideResource,它首先将数据发送到 json。此处不允许更改,必须在功能索引中进行。:

public function toArray($request)
{
    return [
        'id' => $this->id,
        'title' => $this->title,
        'body' => $this->body,
        'active' => $this->active,
        'language' => $this->language,
        'support_guide' => $this->support_guide,
        'support_guide_group' => $this->support_guide_group,

    ];
}

标签: laravellaravel-8

解决方案


"language": {
    "id": 1,
    "name": "Dutch",
    "code": "NL",
    "created_at": "2021-06-14T10:10:32.000000Z",
    "updated_at": "2021-06-14T10:10:32.000000Z"
},

我相信"language"与另一个模型有关系。

这不是你要找的吗?

return [
    // your other attributes...

    'language' => $this->language->relationshipName->name,
];

其中relationshipNameLanguage模型中的方法名称。


推荐阅读