定义

定义一对一关联使用了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——模型关联(一对一关联)的更多相关文章

  1. ThinkPHP5——模型关联(多对多关联)

    关联定义 多对多关联不像一对一和一对多关联,它还要多建一个中间表用来处理多对多的关联,例如: #城市 create table city ( c_id int primary key AUTO_INC ...

  2. ThinkPHP5中模型关联关系一对一,一对多

    TP5 返回json反斜杠前面转义了class XinDai extends Controller{ public function index(){ $res = [ ['logo'=>'/i ...

  3. 04.Hibernate一对一关联

        前言:本文主要介绍使用Hibernate映射一对一的关联关系的两种方式:使用外键映射.使用主键映射. 1.数据库表的一对一关联关系     本文根据客户信息表(tb_customer)和地址信 ...

  4. Hibernate学习笔记(四)关系映射之一对一关联映射

    一. 一对一关联映射 ²        两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ²        有两种策略可以实现一对一的关联映射 Ø        主键关联:即让 ...

  5. 22.Yii2.0框架多表关联一对一查询之hasOne

    思路: 通过文章查它对应的分类信息 一对一的关系 控制器里 //一对一关联查询 public function actionRelatesone() { //方法一,hasOne() 用查一条文章的结 ...

  6. 学习ThinkPHP的第20天--MySQL事务操作、查询事件、一对一关联

    之所以从20天才开始写随笔记是因为之前没搞自己的博客 从20天开始记录我在ThinkPHP中的点点滴滴 1.MySQL事务操作 /**事务操作*/ //startTrans启动事务.rollback回 ...

  7. Hibernate中的一对一关联

    Hibernate提供了两种一对一映射关联关系的方式: 1)按照外键映射 2)按照主键映射 下面以员工账号表和员工档案表(员工账号和档案表之间是一对一的关系)为例,介绍这两种映射关系,并使用这两种 映 ...

  8. Hibernate一对一关联映射配置

    一.一对一关联 Hibernate提供了两种映射一对一关联关系的方式:按照外键映射和按照主键映射.下面以员工账号和员工档案表为例,介绍这两种映射方式,并使用这两种映射方式分别完成以下持久化操作: (1 ...

  9. Hibernate之映射一对一关联

    一.一对一关联的概念: 一对一之间的关联是指:两张表中的信息是一对一的关系,比如我们每个人和身份证的关系,一个人对应一张身份证,一张身份证也只能对应一个人. Hibernate提供了两种映射一对一关联 ...

随机推荐

  1. *args和**kwargs的作用

    ∗args的作用: *的作用有2个 打包参数(pack)和拆分参数(unpack) 函数接受实参时,按顺序分配给函数形参,如果遇到带∗的形参,那么就把还未分配出去的实参以元组形式打包(pack),分配 ...

  2. 让NOI Linux变得可用

    开始用NOI Linux-- 上古加阉割,还是32位,完全不可用的亚子-- 怎么办,我真的好想念16.04 于是就走上魔改之旅-- 一些神奇的操作 git 听说直接装的话会是上古版本 sudo add ...

  3. [考试反思]0719NOIP模拟测试6 + 0722NOIP模拟测试7

    连续爆炸,颇为愉快. 第6次:Rank #4 第7次:Rank #9 对于第6次考试,个人比较满意,因为T1只是差了一个卡常. 因为在考试前两天刚讲了矩阵,满脑子都是矩阵,还想到了循环矩阵优化. 整个 ...

  4. margin:0 auto为何会居中?

    margin: 0 auto;为何会居中呢??? 一开始的学习html的时候,就是只知道块级元素margin:0 auto就能居中 但是后来就很好奇 margin: auto 0;为何不能垂直居中? ...

  5. 【WPF on .NET Core 3.0】 Stylet演示项目 - 简易图书管理系统(3) - 使用Conductor切换页面

    前两章中, 我们已经实现了这个图书管理系统的登录窗口, 并实施了完善的单元测试. 该是时候回过头来关注我们的主窗口了. 一个功能丰富的系统一般会有多个页面, 我们图书管理系统虽然是"简易&q ...

  6. 大数据之路week01--自学之面向对象java(static,this指针(初稿))

    函数的重载 返回值不一样会报错 java中,如果自己定义了构造函数的话,它就不会给你默认一个无参函数 如果一个属性,只进行定义,不初始化,自动补0,如果是一个布尔属性,默认是false但是如果一个局部 ...

  7. 009-2010网络最热的 嵌入式学习|ARM|Linux|wince|ucos|经典资料与实例分析

    前段时间做了一个关于ARM9 2440资料的汇总帖,很高兴看到21ic和CSDN等论坛朋友们的支持和鼓励.当年学单片机的时候datasheet和学习资料基本都是在论坛上找到的,也遇到很多好心的高手朋友 ...

  8. PHP判断是否关注微信公众号

    PHP判断是否关注微信公众号 1 服务号直接请求这个接口https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839 su ...

  9. svg自适应写法

    svg自适应写法<pre><!DOCTYPE html><html lang="en"> <head> <meta chars ...

  10. X-Admin&ABP框架开发-RBAC

    在业务系统需求规划过程中,通常对于诸如组织机构.用户和角色等这种基础功能,通常是将这部分功能规划到通用子域中,这也说明了,对于这部分功能来讲,是系统的基石,整个业务体系是建立于这部分基石之上的,当然, ...