Laravel多态关联的介绍(附代码)

发布时间 - 2019-03-22 00:00:00    点击率:

本篇文章给大家带来的内容是关于laravel多态关联的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

Laravel 多态关联(morphTo,morphMany)

在网站开发的过程中,经常会遇到 评论商品,评论文章, 评论店铺 等等,在处理这样的需求的时候, 经常会新建一张 评论表, 然后通过 一个 type字段来区分 评论的对象 开发过程如下:

新建表操作

php artisan make:model Models/Comments -m

表字段:

 public function up()
    {
        Schema::create('comments', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
            $table->integer('member_id');
            $table->string('comment_object_type');   # 评论对象
            $table->integer('comment_object_id');    # 评论对象的id
            $table->text('comment_content');         # 评论内容
            $table->tinyInteger('status');
        });
    }

做数据迁移:

php artisan migrate

造数据
用户 ID 为2和4 的用户对 商品ID 为 1,2,3,4的商品进行评论:

INSERT INTO `comments`(`member_id`,`comment_object_type`,`comment_object_id`,`status`,`created_at`,`updated_at`)
VALUES
(2,'App\\Models\\Goods',1,0,'2018-09-07 15:58:04','2018-09-07 15:58:04'),
(2,'App\\Models\\Goods',2,0,'2018-09-07 15:58:04','2018-09-07 15:58:04'),
(2,'App\\Models\\Goods',3,0,'2018-09-07 15:58:04','2018-09-07 15:58:04'),
(2,'App\\Models\\Goods',4,0,'2018-09-07 15:58:04','2018-09-07 15:58:04'),
(4,'App\\Models\\Goods',3,0,'2018-09-07 15:58:04','2018-09-07 15:58:04'),
(3,'App\\Models\\Goods',4,0,'2018-09-07 15:58:04','2018-09-07 15:58:04')

2.用户ID 为2 的用户 对 店铺ID 为 1,4 的 店铺进行了评论

INSERT INTO `comments`(`member_id`,`comment_object_type`,`comment_object_id`,`status`,`created_at`,`updated_at`)
VALUES
(2,'App\\Models\\Stores',1,0,'2018-09-07 15:58:04','2018-09-07 15:58:04'),
(2,'App\\Models\\Stores',4,0,'2018-09-07 15:58:04','2018-09-07 15:58:04'),

查询
数据造完毕, 接下来要做查询,查询一下 商品id为2的 所有评论, 并且查询出评论人的信息
普通查询:

public function comment_list(Requset $request, Goods $goods)
  {
        # 查询商品的所有评论
        $comments = Comment::where('comment_object_type',Goods::class)->where('comment_object_id',$goods->id)->get();
       if($comments) {
          foreach($comments as $comment) {
                 $comment->member = Member::find('id',$comment->member_id)    
           }
       }
       dd($comments)
   }

普通连表查

Comment.php 文件
# Comment model 文件修改
   

    # 查找评论的用户的信息
       public function member()
        {
            return $this->belongsTo(Member::class, 'comment_member_id');
        }

需求的查询

 public function comment_list(Requset $request, Goods $goods)
  {
        # 查询商品的所有评论
        $comments = Comment::where('comment_object_type',Goods::class)->where('comment_object_id',$goods->id)->get();
        # 省掉了 循环 在模板遍历的时候 直接调用  $item->member 查看用户信息
       dd($comments)
   }

多态查询

Comment.php 文件
# Comment model 文件修改
 # 评论对象 
   public function comment_object()
    {
        return $this->morphTo();
    }

   # 查找评论的用户的信息
   public function member()
    {
        return $this->belongsTo(Member::class, 'comment_member_id');
    }
Goods.php 文件
# 商品关联评论
    public function comments()
    {
        return $this->morphMany(Comment::class,self::class,'comment_object_type','comment_object_id');
    }

需求的查询

public function comment_list(Requset $request, Goods $goods)
 {
        # 查询商品的所有评论
        $comments =$goods->comments()->with('member')->paginate(15);
        dd($comments)
 }

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的php视频教程栏目! 


# php  # laravel  # 多态  # 经常会  # 遍历  # 对你  # 有一定  # 要做  # 中文网  # 给大家  # 进行了  # 过程中 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在阿里云虚拟主机上快速搭建个人网站?  Android自定义控件实现温度旋转按钮效果  如何在新浪SAE免费搭建个人博客?  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  图册素材网站设计制作软件,图册的导出方式有几种?  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  微信小程序 配置文件详细介绍  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  Laravel如何发送系统通知?(Notification渠道示例)  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  Swift中swift中的switch 语句  七夕网站制作视频,七夕大促活动怎么报名?  如何在建站之星绑定自定义域名?  如何在 React 中条件性地遍历数组并渲染元素  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  微信小程序 闭包写法详细介绍  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  iOS发送验证码倒计时应用  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  香港服务器网站推广:SEO优化与外贸独立站搭建策略  如何在建站主机中优化服务器配置?  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  Laravel怎么在Controller之外的地方验证数据  Swift中循环语句中的转移语句 break 和 continue  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  如何在腾讯云免费申请建站?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  什么是javascript作用域_全局和局部作用域有什么区别?  如何快速打造个性化非模板自助建站?  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  Android GridView 滑动条设置一直显示状态(推荐)  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  Python数据仓库与ETL构建实战_Airflow调度流程详解  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何在云指建站中生成FTP站点?  Python自动化办公教程_ExcelWordPDF批量处理案例  智能起名网站制作软件有哪些,制作logo的软件?  如何自定义建站之星网站的导航菜单样式?  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  Laravel如何处理异常和错误?(Handler示例)  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  C++时间戳转换成日期时间的步骤和示例代码  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】