Laravel5.1 框架模型多态关联用法实例分析

吾爱主题 阅读:144 2021-09-26 13:58:00 评论:0

本文实例讲述了Laravel5.1 框架模型多态关联用法。分享给大家供大家参考,具体如下:

什么是多态关联? 一个例子你就明白了:好比如说评论 它可以属于视频类 也可以属于文章类,当有个需求是 从评论表中取到视频类的数据,这就需要用到多态关联了。

简单的一句话总结:一张表对应两张表。

1 实现多态关联

1.1 文章表的结构

?
1 2 3 4 5 6 7 8 public function up() {    Schema::create( 'articles' , function (Blueprint $table ) {      $table ->increments( 'id' );      $table ->string( 'title' );      $table ->text( 'body' ); $table ->timestamps();    }); }

1.2 视频表结构

?
1 2 3 4 5 6 7 8 9 public function up() {    Schema::create( 'videos' , function (Blueprint $table ) {      $table ->increments( 'id' );      $table ->string( 'title' );      $table ->text( 'description' );      $table ->timestamps();    }); }

1.3 评论表结构

?
1 2 3 4 5 6 7 8 9 10 public function up() {    Schema::create( 'comments' , function (Blueprint $table ) {      $table ->increments( 'id' );      $table ->text( 'content' );      $table ->integer( 'item_id' );      $table ->string( 'item_type' );      $table ->timestamps();    }); }

↑ 这里需要指定 item_id 和 item_type 单一介绍一下 item_type 它主要是区别关联于那张表的 我们这里它只有两个值:App\Article 或 App\Video。

1.4 编写多态关联

Article 和 Video:

?
1 2 3 4 5 6 7 8 9 10 11 public function comments() {    /**     * 第二个参数:如果你的前缀是item_ 那么就写item 如果是别的就写别的。     * 第三个参数:item_type     * 第四个参数:item_id     * 第五个参数:关联到那个表的键     * (以上除了第二个参数都可以省略)     */    return $this ->morphMany(Comment:: class , 'item' , 'item_type' , 'item_id' , 'id' ); }

Comment:

?
1 2 3 4 5 6 7 public function video() {    /**     * 三个参数都可以省略 不过K建议你还是写全     */    return $this ->morphTo( 'item' , 'item_type' , 'item_id' ); }

使用:

?
1 2 3 4 5 6 Route::get( '/' , function () {    $video = App\Video::find(8);    foreach ( $video ->comments as $comment ) {      echo $comment ->id . ": " . $comment ->item_type;    } });

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

原文链接:https://www.cnblogs.com/sun-kang/p/7589185.html

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容