ThinkPHP5——模型关联(一对一关联)
2024-09-01 18:37:37
定义
定义一对一关联使用了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的信息
最新文章
- 移动端开发概览【webview和touch事件】
- Hadoop平台常用配置及优化建议
- 跨域http头
- ORACLE TO_CHAR函数格式化数字的出现空格的原因
- Docker指定multiple Insecure registry的方法
- [转]3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】
- 多控制器之UIWindow
- java_设计模式_工厂模式_Factory Pattern(2016-08-04)
- billing是如何的拆分的?
- java设计模式之五原型模式(Prototype)
- Java基础之数据类型和转换
- jdk 环境配置踩坑
- ORACLE,DECODE函数和排名函数DENSE_RANK函数的使用
- 编程经验点滴----在 Oracle 数据库中保存空字符串
- conda 安装多个版本的python
- 学习笔记TF017:自然语言处理、RNN、LSTM
- Spring、SpringMVC、Hibernate详细整合实例,包含所有步骤
- c++ 函数中的部分代码执行一次
- vue2.0后台系统
- 五行代码终极完美解决从IE6到Chrome所有浏览器的position:fixed;以及闪动问题