Laravel 与一对一子类型的雄辩关系

Laravel 与一对一子类型的雄辩关系,laravel,laravel-5,eloquent,Laravel,Laravel 5,Eloquent,我正在使用一个广告系统。因此,Ad有两种具体类型Text和Banner 在ads表中,有ad_id和ad_type,其中type指的是Text或Banner和id他们的主键。所以广告->混凝土应该返回文本或横幅 我如何以雄辩的方式实现这一点?文档中的所有多态示例都适用于多对多或多对一关系,但我的是一对一关系。 我可以从Ad中进行hasOne操作,方法是首先将类型取回并使用它,但是有更好的方法吗?据我所知,这不支持eagar加载 //In AdModel public function concr

我正在使用一个广告系统。因此,
Ad
有两种具体类型
Text
Banner

在ads表中,有
ad_id
ad_type
,其中type指的是
Text
Banner
和id他们的主键。所以广告->混凝土应该返回
文本
横幅

我如何以雄辩的方式实现这一点?文档中的所有多态示例都适用于多对多或多对一关系,但我的是一对一关系。

我可以从
Ad
中进行hasOne操作,方法是首先将类型取回并使用它,但是有更好的方法吗?据我所知,这不支持eagar加载

//In AdModel
public function concrete() {
    return $this->hasOne($this->ad_type, 'ad_id');
}

我意识到有
morphOne()
方法?不过我还没有试过。我真的很想看看这是如何解决的。我在看morphOne,但我不确定如何使用第一个参数,因为有多个类。morphOne()肯定会在文本和横幅模型中,我猜它仍然像
return$this->morphOne(Banner::class,'ad_id')顺便说一句,我想您必须对表强制一个唯一约束,对于
$table->unique(['ad_id','ad_type'],'id_type_index')我认为子类中的belongsTo()更合适,尽管我不清楚该方法的内部工作原理。找到以下两个相关链接:1。2.不能为此使用单表继承吗?除了选择课程,似乎不需要广告类型。