黑马lavarel教程---10、lavarel模型关联
黑马lavarel教程---10、lavarel模型关联
一、总结
一句话总结:
1、模型关联比较方便,一次定义,后面都可以使用
2、关联关系 使用动态属性进行调用
1、一对多,多对多实例?
一对多:一篇文章有多个评论
多对多:一个文章可能有多个关键词,一个关键词可能被多个文章使用。
2、lavarel模型关联中关联代码是写在主模型中还是写在次模型中?
关联代码写在主模型中
谁是主模型谁是次模型根据实际需求进行分析,比如文章表和关键词表多对多关系,当要查所有文章对应的关键词的时候文章表就是主模型
3、lavarel关联关系的方法名称一般是什么?
被关联的模型名小写
public function 被关联的模型名小写(){return $this -> hasOne(‘需要关联模型的命名空间’,’被关联模型的关系字段,’本模型中的关系字段’); }
4、lavarel模型中如何设置一对多模型中的外键字段?
return $this->hasMany('App\Comment', 'foreign_key', 'local_key');
5、关联关系的使用方法?
使用动态属性进行调用:$roles = App\User::find(1)->roles()->orderBy('name')->get();
<?phpnamespace App; use Illuminate\Database\Eloquent\Model; class User extends Model {/*** 用户的角色*/public function roles(){return $this->belongsToMany('App\Role');} } 一旦关联关系被定义后,你可以通过 roles 动态属性获取用户角色:$user = App\User::find(1);foreach ($user->roles as $role) {// } 当然,像其它所有关联模型一样,你可以使用 roles 方法,利用链式调用对查询语句添加约束条件:$roles = App\User::find(1)->roles()->orderBy('name')->get();
二、lavarel模型关联
关联模型就是绑定模型(表)的关系(关联表),后续需要使用联表的时候就可以直接使用关联模型。注意:关联模型必须要创建模型。
1、一对一关系
例如:一篇文章只有一个作者
①创建模型【前提】
#php artisan make:model Home/Article
#php artisan make:model Home/Author
②定义基本的结构代码
③关联模型的关联方法(重点)
注意:在写关联模型的时候要分析出是谁关联谁,谁做主动关联的模型?当前的案例是文章关联作者,需要关联代码写在主模型中。
语法:
public function 被关联的模型名小写(){
return $this -> hasOne(‘需要关联模型的命名空间’,’被关联模型的关系字段,’本模型中的关系字段’);
}
关联关系的使用方法:使用动态属性进行调用
案例:通过关联模型的一对一关系查询出每个文章对应的作者名称
①定义需要的路由
②创建需要的方法
使用一对一关联关系之后,其可以替代之前写join联表操作。
2、一对多关系
例如:一篇文章有多个评论
由于文章和评论的关系是一对多的关系,所以需要再去创建一个数据表(评论表):
字段id 主键
字段comment 评论内容
字段article_id 和文章的关系字段,文章id
①迁移文件的创建
#php artisan make:migration create_comment_table
②编写迁移文件代码
③执行迁移文件生成数据表
#php artisan migrate
④添加测试的评论内容
a. 创建填充器文件
#php artisan make:seeder CommentTableSeeder
b. 编写填充器文件的代码
c. 执行填充器文件
#php artisan db:seed --class=CommentTableSeeder
⑤评论模型创建起来
#php artisan make:model Home/Comment
定义其基本的属性:
案例:查询出每个文章(主)下所有的评论(从)。
关联关系的编写:
public function 被关联的模型名小写(){
return $this -> hasMany(‘需要关联模型的命名空间’,’被关联模型的关系字段,’本模型中的关系字段’);
}
与hasOne方法相比,其只是把方法名称做了变化,其他与之前一致。
编写test22方法实现上述案例的要求:
操作代码:
效果:
3、多对多关系
例如:一个文章可能有多个关键词,一个关键词可能被多个文章使用。
当点开关键词链接之后,会发现一个关键下能搜出很多文章。
因此,文章和关键词之间是多对多的关系。
对对多的关系经过拆分之后其实就是两个一对多的关系。由于是双向一对多的关系,因此光靠2张表是无法建立的关系的,需要依靠第三张表建立关系(xx与xx的关系表)。
当前已经存在文章表,因此还需要关键词表和关系表。
关键词表:
字段id 主键
字段keyword 关键词
文章与关键词的关系表:
字段id 主键
字段article_id 文章id
字段key_id 关键词id
简易模拟:
Id 关键词 id 文章id 关键词id
1 芳华 1 1 1
2 冯小刚 2 1 2
3 2 1
①创建需要迁移文件
#php artisan make:migration create_keyword_table
#php artisan make:migration create_relation_table
②编写迁移文件的代码
③执行迁移文件生成数据表
#php artisan migrate
④生成测试的数据
#php artisan make:seeder KeywordAndRelationTableSeeder
编写相关代码:
执行填充器文件:
#php artisan db:seed --class=KeywordAndRelationTableSeeder
⑤创建需要的模型
注意:根据手册中记录的语法要求,不需要给关系表单独的创建模型。
该处只需要单独给keyword创建模型即可
#php artisan make:model Home/Keyword
定义模型的基本内部结构
案例:查询出每个文章下全部的关键词
语法:return $this -> belongsToMany(被关联模型的元素空间路径,多对多模型的关系表名,当前模型中的关系键,被关联模型的关系键);
根据案例的要求,此处的关系映射依旧写在文章模型中
编写test23方法,实现刚才案例的需要:
显示效果:
转载于:https://www.cnblogs.com/Renyi-Fan/p/11579725.html
黑马lavarel教程---10、lavarel模型关联相关推荐
- 黑马lavarel教程---5、模型操作(AR模式)
黑马lavarel教程---5.模型操作(AR模式) 一.总结 一句话总结: AR: ActiveRecord :Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型 ...
- 黑马lavarel教程---13、分页
黑马lavarel教程---13.分页 一.总结 一句话总结: - lavarel里面的分页操作和tp里面的分页操作几乎是一模一样的 - 控制器:$data=Lesson::paginate(2); ...
- 黑马lavarel教程---7、文件上传
黑马lavarel教程---7.文件上传 一.总结 一句话总结: 在laravel里面实现文件的上传是很简单的,压根不用引入第三方的类库,作者把上传作为一个简单的http请求看待的. 1.在lavar ...
- 黑马lavarel教程---6、简单验证
黑马lavarel教程---6.简单验证 一.总结 一句话总结: 1.验证的最简单实例:$request的validate方法,验证通过可以继续进行,验证失败就重定向 2.中文提示可以用中文语言包 3 ...
- 黑马lavarel教程---12、lavarel验证码
黑马lavarel教程---12.lavarel验证码 一.总结 一句话总结: 用插件的时候仔细看插件的版本要求 1.lavarel安装验证码插件的时候,如果(可选)需要定义自己的配置,则需要生成配置 ...
- 黑马lavarel教程---11、响应处理
黑马lavarel教程---11.响应处理 一.总结 一句话总结: 如果在昂扬状态,看学习视频和运动时间重合,会很舒服 1.jquery的$.post参数为什么不需要占位? 因为每个参数的类型不同,可 ...
- 黑马lavarel教程---9、缓存操作
黑马lavarel教程---9.缓存操作 一.总结 一句话总结: legend2项目中自己写的哪些文件操作都可以通过这里的缓存实现,简单方便 1.lavarel中如何使用后端主流的缓存如 Memcac ...
- 黑马lavarel教程---8、session
黑马lavarel教程---8.session 一.总结 一句话总结: 1.session默认保存在文件中 2.使用的话通过Session门面或者辅助函数 1.lavarel中session的保存方式 ...
- 黑马lavarel教程---4、csrf验证及相关
黑马lavarel教程---4.csrf验证及相关 一.总结 一句话总结: csrf验证就像短信验证码那样验证用户身份,这个验证是为了验证是本站的操作,用的是一个token字符串,外站如果有了这个to ...
最新文章
- oracle中怎么用累计,oracle实现累加,累计百分比计算
- 009_Redis的事物
- 我的Windows Vista™也装好了...
- python爬虫beautifulsoup爬当当网_Python爬虫包 BeautifulSoup 递归抓取实例详解_python_脚本之家...
- python 双向链表_数据结构-双向链表(Python实现)
- php获取访问浏览器,php获取访问者浏览器
- 自定义计算器 android,自定义公式计算app下载
- C语言经典迭代算法之求解函数定积分(详解)
- 三菱PLC编程软件:GX WORKS2和GX WORKS3的区别
- ES里关于对象的拓展
- Nodejs express中创建ejs项目,解决express下默认创建jade,无法创建ejs问
- python字符串长度_在python中如何获取字符串的长度
- 【前端知识梳理】HTML篇 笔记整理(一)
- oracle按照拼音排序,ORACLE根据中文拼音首字母排序、取得中文拼音首字母函数
- Lotus 新手运维手册
- 推荐系统之用户标签,以及基于标签的算法
- JAVA多态的理解及应用
- Android仿微信头像放大效果
- 药品计算机数据备份管理制度,GMP丨《药品记录与数据管理要求》(试行)解读
- QT提取字符串中的数字
热门文章
- 区块链项目-Lisk
- Windows任务计划创建计划,定时执行PowerShell命令
- Go语言MD5加密用法实例
- 视频处理的知识_开源项目_项目列表
- mybatis配置时出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)...
- 简单使用XPOSED实现一机多号
- MongoDB中_class字段的作用
- 使用光盘作为yum源安装ifconfig等网络命令
- C# 中的 sealed(密封) 关键字
- tmux centos 6.3