Laravel-多态关联

多态关联应用场景是当多个表同时有一个字段需求时设定的,比如:

video 视频表 :视频文件,视频评论

essay 文章表:文章内容,文章评论

这俩个表都有评论这个字段,为了更好的查数据,多态关联可以更好的处理数据

数据表结构#

多态关联允许一个模型在单个关联上属于多个其他模型。例如,想象一下使用您应用的用户可以「评论」文章和视频。使用多态关联,您可以用一个 comments 表同时满足这两个使用场景。让我们来看看构建这种关联所需的数据表结构:

posts    id-integer    title-string    body-textvideos    id-integer    title-string    url-stringcomments    id-integer    body-text    commentable_id-integer    commentable_type-string

comments 表中有两个需要注意的重要字段 commentable_id 和 commentable_type。commentable_id 用来保存文章或者视频的 ID 值,而 commentable_type 用来保存所属模型的类名。commentable_type 是在我们访问 commentable 关联时, 让 ORM 确定所属的模型是哪个「类型」。

模型结构#

接下来,我们来看看创建这种关联所需的模型定义:


    * 获得拥有此评论的模型。

    */publicfunctioncommentable(){return$this->morphTo();}}classPostextendsModel{/**

    * 获得此文章的所有评论。

    */publicfunctioncomments(){return$this->morphMany('App\Comment','commentable');}}classVideoextendsModel{/**

    * 获得此视频的所有评论。

    */publicfunctioncomments(){return$this->morphMany('App\Comment','commentable');}}

获取多态关联#

一旦您的数据库表准备好、模型定义完成后,就可以通过模型来访问关联了。例如,我们只要简单地使用 comments动态属性,就可以获得某篇文章下的所有评论:

$post=App\Post::find(1);foreach($post->commentsas$comment){ //}

插入多态关联数据

$post=App\Post::find(1)->create(['comment'=>'要插入的数据']);

你可能感兴趣的:(Laravel-多态关联)