ThinkPHP5——模型关联(一对一关联)
定义
定义一对一关联使用了hasOne,hasOne
方法的参数包括:
hasOne('关联模型名','外键名','主键名',['模型别名定义'],'join类型');
下面定义一个用户表,公司给每个用户发一辆车,表结构如下:
#汽车表
create table car
(
id int primary key AUTO_INCREMENT comment "编号",
brand varchar(255) comment '汽车名称',
plate_number varchar(255) comment '汽车号码',
uid int comment '用户表'
) #用户表
create table user
(
id int primary key AUTO_INCREMENT comment "编号",
name varchar(255) comment '姓名',
sex varchar(255) comment '性别',
age varchar(255) comment '年龄',
section varchar(255) comment '部门'
)
user的模型使用hasOne()方法关联car表:
<?php namespace app\demo\model;
use think\Model; class User extends Model
{
//定义关联方法
public function car(){
//hasOne('汽车表','汽车外键','用户主键',['模型别名定义'],'join类型');
return $this->hasOne('car','uid','id');
}
}
关联查询
//关联查询
$user = User::get(1);
print_r($user->car);
echo "车牌:{$user->car->plate_number},用户名:{$user->name}";
//或者
$user = User::get(1,'car');
以上只能获取单条关联信息,如果想要获取全部关联信息,如下:
//方法一:使用关联预查询功能,有效提高性能。
$list = User::with('car')->select();
foreach($list as $user){
echo "车牌:{$user->car->plate_number},用户名:{$user->name}<br>";
} //方法二:获取全部关联信息
$list = User::all();
foreach($list as $user){
// 获取用户关联的car模型数据
echo "车牌:{$user->car->plate_number},用户名:{$user->name}<br>";
}
关联新增
//关联新增
$user = new User;
$user->name='老黄';
$user->sex='男';
$user->age="24";
$user->section='开发部';
if ($user->save()){
$car['brand']='奔驰';
$car['plate_number']='A31949';
//uid 不需要指定,自动添加
$user->car()->save($car);
return "用户:{$user->name}新增成功";
}
注:添加是uid不需要指定,自动添加;先新增user的信息,再新增car的信息
关联更新
//关联更新
$user = User::get(1);
$user->name = '小胜';
if($user->save()){
//更新关联数据
$user->car->plate_number = '粤-A31937';
$user->car->save();
}
注:这是是先更新user的信息,再更新car的信息
关联删除
//关联删除
$user = User::get(3);
if($user->delete()){
//删除关联数据
$user->car->delete();
return "用户:{$user->name}删除了";
}
注:这是是先删除user的信息,再删除car的信息
ThinkPHP5——模型关联(一对一关联)的更多相关文章
- ThinkPHP5——模型关联(多对多关联)
关联定义 多对多关联不像一对一和一对多关联,它还要多建一个中间表用来处理多对多的关联,例如: #城市 create table city ( c_id int primary key AUTO_INC ...
- ThinkPHP5中模型关联关系一对一,一对多
TP5 返回json反斜杠前面转义了class XinDai extends Controller{ public function index(){ $res = [ ['logo'=>'/i ...
- 04.Hibernate一对一关联
前言:本文主要介绍使用Hibernate映射一对一的关联关系的两种方式:使用外键映射.使用主键映射. 1.数据库表的一对一关联关系 本文根据客户信息表(tb_customer)和地址信 ...
- Hibernate学习笔记(四)关系映射之一对一关联映射
一. 一对一关联映射 ² 两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ² 有两种策略可以实现一对一的关联映射 Ø 主键关联:即让 ...
- 22.Yii2.0框架多表关联一对一查询之hasOne
思路: 通过文章查它对应的分类信息 一对一的关系 控制器里 //一对一关联查询 public function actionRelatesone() { //方法一,hasOne() 用查一条文章的结 ...
- 学习ThinkPHP的第20天--MySQL事务操作、查询事件、一对一关联
之所以从20天才开始写随笔记是因为之前没搞自己的博客 从20天开始记录我在ThinkPHP中的点点滴滴 1.MySQL事务操作 /**事务操作*/ //startTrans启动事务.rollback回 ...
- Hibernate中的一对一关联
Hibernate提供了两种一对一映射关联关系的方式: 1)按照外键映射 2)按照主键映射 下面以员工账号表和员工档案表(员工账号和档案表之间是一对一的关系)为例,介绍这两种映射关系,并使用这两种 映 ...
- Hibernate一对一关联映射配置
一.一对一关联 Hibernate提供了两种映射一对一关联关系的方式:按照外键映射和按照主键映射.下面以员工账号和员工档案表为例,介绍这两种映射方式,并使用这两种映射方式分别完成以下持久化操作: (1 ...
- Hibernate之映射一对一关联
一.一对一关联的概念: 一对一之间的关联是指:两张表中的信息是一对一的关系,比如我们每个人和身份证的关系,一个人对应一张身份证,一张身份证也只能对应一个人. Hibernate提供了两种映射一对一关联 ...
随机推荐
- RocketMQ实战:生产环境中,autoCreateTopicEnable为什么不能设置为true
1.现象 很多网友会问,为什么明明集群中有多台Broker服务器,autoCreateTopicEnable设置为true,表示开启Topic自动创建,但新创建的Topic的路由信息只包含在其中一台B ...
- [考试反思]1012csp-s模拟测试70:盘旋
这套题比较烂... 上来看到T2是原题,一想上一次考试遇到原题就不换,这次应该也是,于是直接开始码,码了一半然后换题了 T1打表找规律或者推式子都不难... T2水的一匹暴力剪枝即可,但是我并不知道数 ...
- JC的小苹果 逆矩阵
这题主要有两种做法:1种是用逆矩阵,转移时无须高斯消元.2是将常数项回代.这里主要介绍第一种. 首先题里少个条件:点权非负.设f [ i ][ j ]表示hp为i时,到达j点的期望次数. 那么若点权为 ...
- Apache+Tomcat负载均衡
参考:http://www.cnblogs.com/fly_binbin/p/3881207.html 反向代理负载均衡 (Apache2+Tomcat7/8) 使用代理服务器可以将请求转发给内部的 ...
- 使用Typescript重构axios(二十五)——文件上传下载进度监控
0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...
- python入门之五种字典创建方法
a = dict(one = 1, tow = 2, three = 3)b = {'one' :1,'tow' :2 , 'three' :3}c = dict (zip(['one', 'tow' ...
- aop的简单使用(代码和配置记录)
Spring aop 简单示例 简单的记录一下spring aop的一个示例 基于两种配置方式: 基于xml配置 基于注解配置 这个例子是模拟对数据库的更改操作添加事物 其实并没有添加,只是简单的输出 ...
- 【原创】使用批处理脚本自动生成并上传NuGet包
Hello 大家好,我是TANZAME,我们又见面了. NuGet 是什么这里就不再重复啰嗦,园子里一搜一大把.今天要跟大家分享的是,在日常开发过程中如何统一管理我们的包,如何通过批处理脚本生成包并自 ...
- java编程思想第四版第六章总结
1. 代码重构 为什么f要代码重构 第一次代码不一定是完美的, 总会发现更优雅的写法. 代码重构需要考虑的问题 类库的修改不会破坏客户端程序员的代码. 源程序方便扩展和优化 2. 包 创建一个独一无二 ...
- 并发编程-硬件加持的CAS操作够快么?
Talk is cheap CAS(Compare And Swap),即比较并交换.是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三个操作数--内存位置(V).预期原值(A)和新 ...