Получить скрытый атрибут модели, указанной с помощью Model :: with () - PullRequest
0 голосов
/ 27 сентября 2019

В контроллере я использую этот код для получения всех Text объектов и связанных с ними authors

return Text::with('authors')->get();

Это часть серверной части, доступная только администраторам, и мне нужно, чтобы они быливозможность доступа к авторам name полей.Но в модели Author я установил protected $hidden = ['name'];, когда программировал другую часть своего приложения, предназначенную для обычных пользователей.

Существует отношение hasMany: у каждого текста много авторов.Есть ли способ использовать with, но получить какой-то скрытый атрибут?Или наоборот, чтобы временно объявить какой-либо атрибут скрытым при использовании with?

Обратите внимание, что это вопрос об использовании with в сочетании со скрытыми атрибутами.Я не ищу что-то вроде $authors = $authors->makeVisible(['name']); (что объясняется здесь ).

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Я мог бы найти два подхода для решения моей проблемы:

1) Использование each, как видно из этого вопроса

$texts = Text::with('authors')
             ->get()
             ->each(function ($text) {
    $text->authors->makeVisible(['name']);
});

2) Использование transform() как рекомендовано в ответ на тот же вопрос.Это кажется намного быстрее.

$texts = Text::with('authors')
             ->get()
             ->transform(function ($text) {
    $text->authors->makeVisible(['name']);
    return $text;
});
0 голосов
/ 27 сентября 2019

Попробуйте этот код:

Text::with(['author'=>function($q){
$q->makeVisible('name')
}])->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...