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');
$tab
le->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站点访问权限与数据传输安全?


le->timestamps();
$table->integer('member_id');
$table->string('comment_object_type'); # 评论对象
$table->integer('comment_object_id'); # 评论对象的id
$table->text('comment_content'); # 评论内容
$table->tinyInteger('status');
});
}