как изменить запрос, чтобы он отображал только имя, а не весь массив (laravel 8)

#laravel #laravel-8

Вопрос:

У меня есть запрос, который собирает данные в коллекцию, проблема в том, что он показывает иностранный идентификатор, но я хочу, чтобы он отображал то, что я указал в параметрах URL.

  • columnsGiven является параметром из url. содержит имена столбцов с дочерними: «language.name». итак column=active,title,language.name

Например, я получаю это:

 "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: "AppModelsSupportGuideTranslation";


    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, он отправляет данные в vue, сначала делая их 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,

    ];
}
 

Комментарии:

1. можете ли вы показать GuideResource

2. @JohnLobo я все обновил. 🙂

3. ‘язык’ => $это->>язык->>>имя, вы пробовали это

4. Цель состоит в том, чтобы сделать это динамически, поэтому я не хочу изменять источник руководства. Все это должно быть сделано в индексе функций.

Ответ №1:

 "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,
];
 

где relationshipName находится имя метода в Language модели.

Комментарии:

1. Я забыл упомянуть в посте, что GuideResource нельзя изменять. Цель состоит в том, чтобы сделать это динамически, я заполняю, какие столбцы я хочу в URL, а индекс функции должен сделать все остальное.

2. @SaiyanPrice я обновил весь пост. теперь имеет смысл то, что я написал, извините.