定义

定义一对一关联使用了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的信息

最新文章

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

热门文章

  1. 推荐一款Diffy:Twitter的开源自动化测试工具
  2. java本地缓存
  3. C#winfrom将XML数据保存读取删除
  4. nyoj 55-懒省事的小明(priority_queue)
  5. JQury自动切换图片
  6. Redis单节点数据同步到Redis集群
  7. asp.net以流导出Excel
  8. Docker从入门到掉坑(三):容器太多,操作好麻烦
  9. vue路由传参刷新丢失
  10. caffe网络在多线程中无法使用GPU的解决方案 | cpp caffe net run in multiple threads