Laravel5.1 框架模型多态关联用法实例分析
吾爱主题
阅读:156
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.作者投稿可能会经我们编辑修改或补充。