Красноречивые поля предельных отношений

У меня есть следующие отношения:

TheEpisodeJob hasOne TheEpisode
TheEpisodeJob hasMany TheJobs

Я успешно извлекаю все TheEpisodesJobs а также TheSeriesEpisodes со всеми полями в базе данных (включая конфиденциальную информацию), используя эту команду:

$jobs = TheEpisodeJob::with('TheEpisode')->get();

Я хотел бы ограничить TheEpisode поля показаны только для этого случая (public $hidden не будет работать)

Допустим, мне нужно только title а также description поле из TheEpisode,

Как я могу этого достичь?

3

Решение

Как указывал @Buglinjo, вы можете охватить отношения при активной загрузке, однако, если вы собираетесь делать это только для выбора определенных столбцов, вы должны включить связанный столбец в выборку, чтобы Eloquent знает, к какой модели прикрепить соответствующие данные.

Это должно дать вам то, что вы хотите:

$jobs = TheEpisodeJob::with(['TheEpisode' => function ($query) {

$query->select('jobID', 'title', 'description');

}])->get();

Кроме того, если вы хотите избавиться от jobID а также вы могли бы сделать что-то вроде:

$jobs->transform(function ($job) {

$job->TheEpisode->transform(function ($item) {
unset($item->jobID);

return $item;
});

return $job;
});

Надеюсь это поможет!

2

Другие решения

Насколько я понял, вы хотите ограничить результаты в соответствии с некоторыми другими параметрами. Если я прав, вы должны добавить больше запросов, например:

->where, ->orwhere, ->select, ->whereNull

Вот ссылка для большего количества запросов. Надеюсь, это поможет)

Я видел обновление, так что тогда вам нужно

->pluck('title', 'description');

для получения дополнительной информации перейдите по ссылке выше

0

Вы должны сделать так:

$jobs = TheEpisodeJob::with(['TheEpisode' => function($q){
$q->get(['title', 'description']);
//or
$q->pluck('title', 'description');
}])->get();

Замечания: pluck получает как массив не как Eloquent Object.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector