Пожалуйста, предложите лучшее название для этого вопроса. У меня проблемы с правильным названием моего вопроса.
Справочная информация
Я создаю базу данных comi c для личного использования, чтобы отслеживать мои чтения comi c. Каждый коми c принадлежит серии. У каждого комикса есть дата выхода. Дата выпуска серии является первым выпуском соответствующего коми c. У меня есть красноречивая функция seriesByDate()
для этого:
class Series extends Model
{
public $timestamps = false;
protected $primaryKey = 'series_id';
protected $fillable = ['series_name', 'publisher_id'];
public function publisher()
{
return $this->belongsTo(Publisher::class, 'publisher_id');
}
public function comics()
{
return $this->hasMany(Comic::class, 'series_id', 'series_id');
}
// instead of saving the release date of a complete series
// we look for the first comic in this series and get the
// comic's release date.
public static function seriesByDate()
{
$firstRelease = DB::table('comics')
->select('series_id', DB::raw('MIN(comic_release_date) as first_release'))
->groupBy('series_id');
$seriesByDate = DB::table('series')
->leftJoinSub($firstRelease, 'first_release', function ($join) {
$join->on('series.series_id', '=', 'first_release.series_id');
})
->join('publishers', 'publishers.publisher_id', '=', 'series.publisher_id')
->select('series.series_id', 'series.series_name', 'first_release', 'publishers.publisher_name')
->get();
return $seriesByDate;
}
Что я хочу
Я хочу, чтобы release_date
каким-то образом был постоянным для моей модели серии. Значение: когда я делаю App\Series::all()
, я уже хочу иметь release_date в качестве столбца в моих возвращенных данных. Подобно App\Series::with('publishers')->get()
С моим решением, приведенным выше, я должен явно выполнить App\Series::seriesByDate()
Возможно ли это вообще? Можете ли вы дать мне подсказку?
Редактировать / обновить
Связанное видео @Musa показывает, как правильно сделать это в модели: { ссылка }