#php #laravel #eloquent #laravel-8
#php #laravel #красноречивый #laravel-8
Вопрос:
У меня есть ресурс модели, и я вызываю $this-> теги внутри него
Этот ресурс возвращается следующим образом:
"data": {
"some_keys" : ...,
"some_keys2" : ...,
"tags":[
{
"id": 1,
"name": "c ",
"parent_id": null,
"type": null,
"created_at": "2020-09-27 20:37:57",
"updated_at": "2020-09-27 20:37:57",
"pivot": {
"task_id": 43,
"skill_id": 1
}
}
]
Я хочу сделать следующее:
"data": {
"some_keys" : ...,
"some_keys2" : ...,
"tags": [
{
"id": 1,
"name": "c "
}
]
Моя модель ресурсов:
public function toArray($request)
{
$data = parent::toArray($request);
$data["tags"] = $this->tags;
return $data;
}
Моя модель задачи:
public function tags(){
return $this->belongsToMany(Skill::class, 'task_skills', 'task_id', 'skill_id');
}
Как я могу уменьшить некоторые столбцы тегов в модели ресурсов?
Я решил это так:
$data["tags"] = $this->tags->makeHidden(['pivot','created_at','updated_at','type','parent_id']);
Комментарии:
1. Если мой ответ не решит вашу проблему, пожалуйста, сообщите мне больше о вашей проблеме, чтобы я мог вам помочь.
2. @PrafullaKumarSahu Я пробовал «только» и «получить», ни один из них не решил мою проблему. Когда я использовал ‘only’, он возвращает пустой массив. И для get он возвращает null . Также я не хотел использовать ‘pluck’
3. Итак, вам нужны только теги, а внутри тегов также нужны только id и name?
4. @PrafullaKumarSahu Не только теги, я просто фильтрую только теги, которые возвращают идентификатор и имя. Это та часть, которую мне нужно исправить, что $this-> теги
5. Хорошо, я обновлю свой ответ, можете ли вы отредактировать свой вопрос и добавить, как вы извлекаете свои данные, поскольку обход коллекции будет неэффективным.
Ответ №1:
Существует довольно много методов сбора, которые вы пытаетесь реализовать на основе того, что вы можете использовать.
вырвать
$collection = collect([
[
'speakers' => [
'first_day' => ['Rosa', 'Judith'],
'second_day' => ['Angela', 'Kathleen'],
],
],
]);
$plucked = $collection->pluck('speakers.first_day');
$plucked->all();
// ['Rosa', 'Judith']
Только
$collection = collect(['product_id' => 1, 'name' => 'Desk', 'price' => 100, 'discount' => false]);
$filtered = $collection->only(['product_id', 'name']);
$filtered->all();
// ['product_id' => 1, 'name' => 'Desk']
получить
$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);
$value = $collection->get('name');
// Taylor
Если вы всегда хотите, чтобы некоторые атрибуты были скрыты, вы можете использовать
protected $hidden = ['parent_id', 'created_at'];
в вашей модели
Комментарии:
1. Вызов неопределенного метода IlluminateDatabaseEloquentRelationsbelongsToMany::all()
2. @Furkanozturk можете ли вы вставить копию своей коллекции в свой вопрос или суть и поделиться со мной?
3. Я решил, используя makeHidden для других столбцов. Спасибо за ваши усилия
4. @Furkanozturk хорошо.