【发布时间】:2020-05-02 09:10:14
【问题描述】:
请为这个问题建议一个更好的标题。我无法正确命名我的问题。
背景
我正在创建一个供个人使用的漫画数据库,以跟踪我的漫画阅读。每部漫画都属于一个系列。每部漫画都有发布日期。系列的发布日期是相应漫画的首次发布。为此,我有一个雄辩的函数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 在我的 Series 模型中永久存在。含义:当我执行App\Series::all() 时,我已经希望将 release_date 作为我返回的数据中的一列。类似于App\Series::with('publishers')->get()
使用上面的解决方案,我必须明确执行App\Series::seriesByDate()
这甚至可能吗?可以给个提示吗?
编辑/更新
@Musa 的链接视频展示了如何在模型中正确执行此操作:https://stackoverflow.com/a/61558482/5754486
【问题讨论】: