黑马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();
<?php

namespace 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方法,实现刚才案例的需要:

显示效果:

 

黑马lavarel教程---10、lavarel模型关联的更多相关文章

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

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

  2. 黑马lavarel教程---1、lavarel目录结构

    黑马lavarel教程---1.lavarel目录结构 一.总结 一句话总结: 一套视频讲的东西太少,要看多套视频 1.安装lavarel需要额外开启的模块? extension=php_filein ...

  3. 黑马lavarel教程---13、分页

    黑马lavarel教程---13.分页 一.总结 一句话总结: - lavarel里面的分页操作和tp里面的分页操作几乎是一模一样的 - 控制器:$data=Lesson::paginate(2); ...

  4. 黑马lavarel教程---7、文件上传

    黑马lavarel教程---7.文件上传 一.总结 一句话总结: 在laravel里面实现文件的上传是很简单的,压根不用引入第三方的类库,作者把上传作为一个简单的http请求看待的. 1.在lavar ...

  5. 黑马lavarel教程---6、简单验证

    黑马lavarel教程---6.简单验证 一.总结 一句话总结: 1.验证的最简单实例:$request的validate方法,验证通过可以继续进行,验证失败就重定向 2.中文提示可以用中文语言包 3 ...

  6. 黑马lavarel教程---9、缓存操作

    黑马lavarel教程---9.缓存操作 一.总结 一句话总结: legend2项目中自己写的哪些文件操作都可以通过这里的缓存实现,简单方便 1.lavarel中如何使用后端主流的缓存如 Memcac ...

  7. 黑马lavarel教程---12、lavarel验证码

    黑马lavarel教程---12.lavarel验证码 一.总结 一句话总结: 用插件的时候仔细看插件的版本要求 1.lavarel安装验证码插件的时候,如果(可选)需要定义自己的配置,则需要生成配置 ...

  8. 黑马lavarel教程---11、响应处理

    黑马lavarel教程---11.响应处理 一.总结 一句话总结: 如果在昂扬状态,看学习视频和运动时间重合,会很舒服 1.jquery的$.post参数为什么不需要占位? 因为每个参数的类型不同,可 ...

  9. 黑马lavarel教程---8、session

    黑马lavarel教程---8.session 一.总结 一句话总结: 1.session默认保存在文件中 2.使用的话通过Session门面或者辅助函数 1.lavarel中session的保存方式 ...

随机推荐

  1. CSS模块化:less

    less的安装与基本使用 less的语法及特性 一.本地使用less的方法 Less (Leaner Style Sheets 的缩写) 是一门向后兼容的 CSS 扩展语言.是一种动态样式语言,属于c ...

  2. 第一章·MySQL介绍及安装

    一.DBA工作内容及课程体系 二.MySQL课程体系介绍 三.DBA的职业素养 四.MySQL简介及安装 4.1 什么是数据? 数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客 ...

  3. 最贵的AMD 7nm显卡来了!这设计 够狂野

    ROG STRIX系列配备三个风扇(支持智能启停).多条热管.金属背板,厚度达2.5个插槽位,另有两个8针辅助供电,因此最大供电能力375W,必然会预先大幅超频,而且应该仍有手动超频空间,当然也少不了 ...

  4. mysql高级:触发器、事务、存储过程、调用存储过程

    一.触发器 二.pymysql事务测试 三.存储过程 四.pymysql调用存储过程 一.触发器  在某个时间发生了某个事件时  会自动触发一段sql语句 create trigger cmd_ins ...

  5. altium designer 鼠线

    第一: 按“L”进入View Configurations 要确保Default Color for New Nets是勾上的. 第二: 如果“PCB”的下拉列表处于“From-To Editor”状 ...

  6. JMeter函数整理

    "_intSum” 功能:用于计算多个整数的和,可以是计算正整数和负整数的和,它有N个参数,最少有3个参数,最多不限.最后一个参数是函数名称,前面的其它参数是要求和的整数.这个函数在函数对话 ...

  7. Linux之yum安装LAMP环境与管理

    [1] 什么是LAMP 目前世界最流行的企业建站方式是LAMP(Linux+Apache+MySQL+PHP),即使用Linux作为操作系统,Apache作为Web服务器,MySQL作为数据库,PHP ...

  8. Web Api(3)

    Web API中的路由. 路由机制会把一个请求的URL映射到一个Controller上面的Action.这一点很关键.也就说你发送一个Http请求,MVC框架会解析这个请求的URL,之后尝试把它去映射 ...

  9. 使用curl出现,curl: /usr/local/lib/libssl.so.1.1: version `OPENSSL_1_1_1' not found (required by /usr/lib/x86_64-linux-gnu/libcurl.so.4)

    主要原因是curl找不到openssl的路径,所以只要将openssl的路径添加到相应的变量中就可以了. 参考连接https://blog.csdn.net/RookieWutongshu/artic ...

  10. CentOS5、CentOS6启动流程

    这三篇文章讲的都很好,可以看一下 http://os.51cto.com/art/201407/446819.htm http://www.mamicode.com/info-detail-11656 ...