legend3---lavarel多对多模型操作实例

一、总结

一句话总结:

在多对多模型中,增加关系表的数据 需要 弄一个和关系表一对多的模型关系

1、在lavarel关系模型中,课程和标签表是多对多,那么我如何增加课程标签联合表的数据?

定义一个一对多的模型,因为课程和标签表是多对多,那么课程和课程标签联合表是一对多
//与课程标签联合表的一对多关系
public function hasManyLessonTags(){return $this->hasMany(\App\Model\Admin\TagAndLesson::class,'tl_l_id','l_id');
}

//2、插入标签课程数据--关系表
$tags=$request['tags'];
foreach ($tags as $tag){$tag_lesson=[];$tag_lesson['tl_t_id']=$tag;//$tag_lesson['tl_l_id']=$lesson['l_id'];//TagAndLesson::create($tag_lesson);//dd($tag_lesson);$lesson->hasManyLessonTags()->create($tag_lesson);}

2、在lavarel关系模型中,定义模型关系的第一个参数是什么意思:例如$this->hasMany(Video::class,'v_l_id','l_id');?

关联的模型,也就是【最终要获取数据的表模型】,这里是哪个模型就表示要操作哪个表

3、在lavarel关系模型中,课程和标签表是多对多,我在定义好了多对多的模型关系,我能否用这个模型关系增加课程标签联合表的数据?

不能,因为模型关系的第一个参数是最终要操作数据的表模型

二、lavarel多对多模型操作实例

1、关系和数据表结构

课程和标签表是多对多

课程表:lessons

CREATE TABLE `lessons`  (`l_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,`l_title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,`l_introduce` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,`l_preview` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,`l_is_commend` tinyint(4) NOT NULL,`l_is_hot` tinyint(4) NOT NULL,`l_click` int(11) NOT NULL DEFAULT 0 COMMENT '点击数/浏览数',`l_like` int(11) NOT NULL DEFAULT 0 COMMENT '点赞数',`l_comment_num` int(11) NOT NULL DEFAULT 0 COMMENT '评论数',`created_at` timestamp(0) NULL DEFAULT NULL,`updated_at` timestamp(0) NULL DEFAULT NULL,PRIMARY KEY (`l_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 27 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

标签表:tags

CREATE TABLE `tags`  (`t_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,`t_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,`created_at` timestamp(0) NULL DEFAULT NULL,`updated_at` timestamp(0) NULL DEFAULT NULL,PRIMARY KEY (`t_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

课程标签表:tag_and_lessons

CREATE TABLE `tag_and_lessons`  (`tl_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,`tl_t_id` int(11) NOT NULL COMMENT '标签id',`tl_l_id` int(11) NOT NULL COMMENT '课程id',`created_at` timestamp(0) NULL DEFAULT NULL,`updated_at` timestamp(0) NULL DEFAULT NULL,PRIMARY KEY (`tl_id`) USING BTREE,INDEX `tag_and_lessons_tl_t_id_index`(`tl_t_id`) USING BTREE,INDEX `tag_and_lessons_tl_l_id_index`(`tl_l_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

2、模型代码

app/Model/Lesson.php

 1 <?php
 2
 3 namespace App\Model;
 4
 5 use Illuminate\Database\Eloquent\Model;
 6
 7 class Lesson extends Model
 8 {
 9     protected $primaryKey='l_id';
10     /**
11      * 与视频表模型的一对多关联
12      * @return \Illuminate\Database\Eloquent\Relations\HasMany
13      */
14     public function videos(){
15         return $this->hasMany(Video::class,'v_l_id','l_id');
16     }
17
18     //与标签的多对多关系
19     public function hasManyTags(){
20         return $this->belongsToMany('App\Model\Tag','tag_and_lessons','tl_l_id','tl_t_id');
21     }
22
23     //与课程标签联合表的一对多关系
24     public function hasManyLessonTags(){
25         return $this->hasMany(\App\Model\Admin\TagAndLesson::class,'tl_l_id','l_id');
26     }
27 }

app/Model/Tag.php

<?phpnamespace App\Model;use Illuminate\Database\Eloquent\Model;class Tag extends Model
{//$guarded表示不允许批量填充的字段protected $primaryKey='t_id';protected $guarded=[];}

app/Model/Admin/TagAndLesson.php

<?phpnamespace App\Model\Admin;use Illuminate\Database\Eloquent\Model;class TagAndLesson extends Model
{//
    protected $primaryKey='tl_id';protected $guarded=[];
}

3、控制器中使用的代码

app/Http/Controllers/Admin/LessonController.php

 1     public function store(Request $request,Lesson $lesson)
 2     {
 3         DB::transaction(function () use ($request,$lesson) {
 4             //dd($request->toArray());
 5             $lesson['l_title']=$request['l_title'];
 6             $lesson['l_introduce']=$request['l_introduce'];
 7             $lesson['l_preview']=$request['l_preview'];
 8             $lesson['l_is_commend']=$request['l_is_commend'];
 9             $lesson['l_is_hot']=$request['l_is_hot'];
10             $lesson['l_click']=$request['l_click'];
11             $lesson->save();
12             //dd($lesson['l_id']);
13             //dd($lesson->toArray());
14
15             //2、插入标签课程数据--关系表
16             $tags=$request['tags'];
17             foreach ($tags as $tag){
18                 $tag_lesson=[];
19                 $tag_lesson['tl_t_id']=$tag;
20                 //$tag_lesson['tl_l_id']=$lesson['l_id'];
21                 //TagAndLesson::create($tag_lesson);
22                 //dd($tag_lesson);
23                 $lesson->hasManyLessonTags()->create($tag_lesson);
24
25             }
26
27
28             //videos数据过来的时候是json数据,true表示转成数组而非对象
29             $videos=json_decode($request['videos'],true);
30             //dd($videos);
31             foreach ($videos as $video){
32                 unset($video['v_id']);
33                 $lesson->videos()->create($video);
34 //            $lesson->videos()->create([
35 //                'title'=>$video['title'],
36 //                'path'=>$video['path'],
37 //            ]);
38             }
39         });
40
41
42         return redirect('/admin/lesson');
43
44
45     }

转载于:https://www.cnblogs.com/Renyi-Fan/p/11605426.html

legend3---lavarel多对多模型操作实例相关推荐

  1. Fluent多相流之VOF模型操作实例

    Fluent多相流之VOF模型操作实例 前言:"相"指不同物态或同一物态的不同物理性质或力学状态.相具有可定义的边界,对周围流场有特定的动力响应,相一般分为固体.液体和气体,但也指 ...

  2. 黑马lavarel教程---5、模型操作(AR模式)

    黑马lavarel教程---5.模型操作(AR模式) 一.总结 一句话总结: AR: ActiveRecord :Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型 ...

  3. 后盾网lavarel视频项目---lavarel多表关联一对多操作实例

    后盾网lavarel视频项目---lavarel多表关联一对多操作实例 一.总结 一句话总结: 1.一对多中多那个部分的数据前端通过json弄到服务器 2.所有通过一操作多的时候,都要用上模型中定义的 ...

  4. 后盾网lavarel视频项目---模型一对多关联简单实例

    后盾网lavarel视频项目---模型一对多关联简单实例 一.总结 一句话总结: 在模型中定义一个方法来设置一对多关联:return $this->hasMany(Video::class); ...

  5. 一对一、一对多、多对多模型关系的建立和增删改查要注意的问题

    一对一.一对多.多对多模型关系的建立和增删改查要注意的问题 一对一: 1.在维护关系的一方使用:models.OneToOneField(另一个一方模型类名称,on_delete=models.CAS ...

  6. .ne中的控制器循环出来的数据如何显示在视图上_Web程序设计-ASP.NET MVC4数据库操作实例...

    ASP.NET MVC4数据库操作实例 之前文章介绍了MVC4与Pure框架结合进行的网页设计过程中如何定义控制器.方法.模型.视图等.并使用实例进行了简单说明.本文将在此基础上进一步说明如何使用MV ...

  7. do与mysql数据类型对照_dophon-db: dophon框架的数据库模块,支持mysql,sqlite数据库,带有orm持久化功能与链式操作实例,贴近逻辑习惯,支持mysql多数据源配置...

    dophon-db 项目介绍 dophon框架的数据库模块,也可单独作为一个与数据库模块交互的部件 支持mysql数据库连接 支持orm形式的数据操作 如有疑问请发送邮件联系作者:ealohu@163 ...

  8. laravel mysql 视图_Laravel框架控制器,视图及模型操作图文详解

    本文实例讲述了Laravel框架控制器,视图及模型操作.分享给大家供大家参考,具体如下: 鉴于上一篇Laravel框架下载,安装及路由操作我们讲到了路由,可能大家会觉得路由这个东西无所不,可路由这个东 ...

  9. Quill编辑器操作实例详解

    今天分享下"Quill编辑器操作实例详解"这篇文章,文中根据实例编码详细介绍,或许对大家的编程之路有着一定的参考空间与使用价值,需要的朋友接下来跟着云南仟龙Mark一起学习一下吧. ...

最新文章

  1. Python实战 | 送亲戚,送长辈,月饼可视化大屏来帮忙!
  2. Mach-O 的动态链接(Lazy Bind 机制)
  3. 根据遍历序列画二叉树
  4. kvm cobbler无人值守批量安装操作系统
  5. android studio 导入第三方库的记录
  6. 忽略SQL改造等价性
  7. 获取iOS 设备上崩溃日志 (Crash Log)的方法
  8. Android 应用开发(第四章)---手机海外市场移动应用
  9. 2016拜拜,2017我来
  10. for (;;) 与 while (true),哪个更快?
  11. Power Builder软件的下载安装
  12. 微信8.0表情没有特效怎么回事
  13. WP-CONTENT/UPLOADS的777,775,744,644,444文件权限设置
  14. 算法复杂度分析,算法复杂度o(1), o(n), o(logn), o(nlogn) 时间复杂度On和空间复杂度O1是什么意思?
  15. 常见网络爬虫反爬机制与反爬机制的解决方案
  16. 改造摄像头模块成开发板
  17. 理论小知识:集合之scard
  18. 我才23岁,我要去追太阳了
  19. 涉黄网站爆四大生财链:站长月入近两万
  20. 围观设计模式(16)--结构型之组合模式(Composite Pattern)

热门文章

  1. Zabbix基本配置及监控主机
  2. 编写线程安全的Java缓存读写机制 (原创)
  3. 【转】修改版WinXP集体歇业避免遭遇调查
  4. 设置Grid某列的Title样式和列内数据样式
  5. 分布式单点登录框架XXL-SSO
  6. Java Eclipse进行断点调试
  7. linux安装redis服务,配置PHP扩展
  8. 高效的沟通方式-会议
  9. Mysql 各个版本区别
  10. [转载] 七龙珠第一部——第095话 悟空对抗克林