Laravel:针对不同内容类型的一对多或多态关系?

时间:2017-10-05 10:31:22

标签: php laravel migration laravel-migrations

我有一个表contents,其中包含多种类型,例如postsalbumsvideos

内容表迁移是:

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,我不知道它是否对我的情况有好处。

任何建议?

0 个答案:

没有答案