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


相关推荐: javascript如何操作浏览器历史记录_怎样实现无刷新导航  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  如何快速搭建自助建站会员专属系统?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  EditPlus中的正则表达式 实战(2)  PythonWeb开发入门教程_Flask快速构建Web应用  Laravel怎么连接多个数据库_Laravel多数据库连接配置  如何在服务器上配置二级域名建站?  如何快速搭建二级域名独立网站?  Linux后台任务运行方法_nohup与&使用技巧【技巧】  高性能网站服务器配置指南:安全稳定与高效建站核心方案  javascript读取文本节点方法小结  如何用腾讯建站主机快速创建免费网站?  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  Laravel Docker环境搭建教程_Laravel Sail使用指南  百度浏览器如何管理插件 百度浏览器插件管理方法  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  Laravel怎么在Controller之外的地方验证数据  非常酷的网站设计制作软件,酷培ai教育官方网站?  JavaScript模板引擎Template.js使用详解  如何用西部建站助手快速创建专业网站?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  HTML 中动态设置元素 name 属性的正确语法详解  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  如何用JavaScript实现文本编辑器_光标和选区怎么处理  音响网站制作视频教程,隆霸音响官方网站?  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  Laravel怎么使用artisan命令缓存配置和视图  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  做企业网站制作流程,企业网站制作基本流程有哪些?  Laravel如何使用withoutEvents方法临时禁用模型事件  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  Laravel如何实现模型的全局作用域?(Global Scope示例)  Linux安全能力提升路径_长期防护思维说明【指导】  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  如何用景安虚拟主机手机版绑定域名建站?  如何快速辨别茅台真假?关键步骤解析  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  Laravel集合Collection怎么用_Laravel集合常用函数详解  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  如何确保FTP站点访问权限与数据传输安全?