我有一个表contents
,其中包含多种类型,例如posts
,albums
,videos
。
内容表迁移是:
Schema::create('contents', function (Blueprint $table) {
$table->increments('id');
$table->integer('ref_id')->index();
$table->integer('type')->index();
$table->string('title', 255);
$table->text('description');
$table->boolean('published')->default(false);
$table->string('thumb', 255);
$table->timestamps();
});
和帖子表迁移是:
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->text('body');
});
同样的想法适用于所有其他类型的视频:
Schema::create('videos', function (Blueprint $table) {
$table->increments('id');
$table->string('youtube_id', 255);
});
要立即检索完整内容,我使用hasMany关系:
class Content extends Model
{
public function posts() {
return $this->hasMany('App\Post','id' ,'ref_id');
}
public function videos() {
return $this->hasMany('App\Video','id' ,'ref_id');
}
...
}
class Post extends Model
{
public function content() {
return $this->belongsTo('App\Content', 'id' , 'ref_id')->where('type','1');
}
}
class Video extends Model
{
public function content() {
return $this->belongsTo('App\Content', 'id' , 'ref_id')->where('type','3');
}
}
如您所见,我手动添加types
每个类型都有一个数字,例如,类型1的内容适用于帖子,类型3的内容适用于视频等。
我觉得我的结构不那么好,可以改进。我在文档中遇到了Polymorphic Relations,我不知道它是否对我的情况有好处。
任何建议?