У меня есть следующие отношения:
TheEpisodeJob hasOne TheEpisode
TheEpisodeJob hasMany TheJobs
Я успешно извлекаю все TheEpisodesJobs
а также TheSeriesEpisodes
со всеми полями в базе данных (включая конфиденциальную информацию), используя эту команду:
$jobs = TheEpisodeJob::with('TheEpisode')->get();
Я хотел бы ограничить TheEpisode
поля показаны только для этого случая (public $hidden
не будет работать)
Допустим, мне нужно только title
а также description
поле из TheEpisode
,
Как я могу этого достичь?
Как указывал @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;
});
Надеюсь это поможет!
Насколько я понял, вы хотите ограничить результаты в соответствии с некоторыми другими параметрами. Если я прав, вы должны добавить больше запросов, например:
->where, ->orwhere, ->select, ->whereNull
Вот ссылка для большего количества запросов. Надеюсь, это поможет)
Я видел обновление, так что тогда вам нужно
->pluck('title', 'description');
для получения дополнительной информации перейдите по ссылке выше
Вы должны сделать так:
$jobs = TheEpisodeJob::with(['TheEpisode' => function($q){
$q->get(['title', 'description']);
//or
$q->pluck('title', 'description');
}])->get();
Замечания: pluck
получает как массив не как Eloquent Object.