#php #laravel #eloquent
#php #laravel #eloquent
Вопрос:
я использую laravel
7.30, у меня есть модель post, связанная с моделью user с отношением belongsTo, я хочу получить все сообщения с пользовательским свойством, которое содержит только имя пользователя для целей api.
что я пробовал до сих пор.
public function index()
{
return Post::with('user:id,name')->get();
}
но результатом этого кода является вложенный объект «user», который имеет 2 поля id и name в каждом сообщении, мне нужно только одно поле с полями сообщений, называемое user, которое имеет только имя, а не вложенный объект для целей api.
Я сделал это с помощью построителя запросов к базе данных, но я ищу способ с помощью Eloquent
Заранее спасибо
Ответ №1:
Вы можете добавить это в свою Post
модель:
protected $appends = [
"author_name"
];
public function getAuthorNameAttribute()
{
return $this->user->name;
}
Это гарантирует, что имя пользователя добавляется к Post
объекту каждый раз, когда он вызывается.
Затем с вашего контроллера вы можете легко это сделать:
public function index()
{
return Post::get();
}
Комментарии:
1. Именно то, что я хотел, но все еще включает пользовательский объект, поэтому мне пришлось скрыть его, используя скрытый массив в модели post, спасибо
2. Я рад , что смог помочь Закарии Бенали . Пожалуйста, поддержите мой ответ 😊
3. Готово! , работает ли этот метод для вложенных отношений? например сообщение с комментариями можете ли вы получить комментарий с именем пользователя тем же методом
4. Да, это работает и для вложенных отношений, вам просто нужно добавить то же
getAuthorNameAttribute()
самое и вComment
модель. Вы еще не проголосовали за … пожалуйста, используйте стрелку, указывающую вверх на ответ, чтобы проголосовать за5. Я проголосовал, но, похоже, мне нужно набрать 15 репутаций, чтобы оно отображалось в сообщениях, я получаю это сообщение «Спасибо за отзыв! Голоса, поданные лицами с репутацией менее 15, записываются, но не изменяют публично отображаемый результат публикации. »