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 】
相关推荐:
如何在阿里云虚拟主机上快速搭建个人网站?
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实现扫码支付【实战】


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