#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 я обновил весь пост. теперь имеет смысл то, что я написал, извините.