定义

定义一对一关联使用了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. IDEA 使用lombok

    一.配置maven <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback ...

  2. [考试反思]1007csp-s模拟测试63:朦胧

    别找了原来没有写过叫<朦胧>的我check过了.(慌的一匹) 总算是比较早的改完了一套题. 但是考的是个啥啊... 前两道题都很卡常导致我想到了正解但是都放弃了. 2e8的复杂度怎么可能能 ...

  3. Java描述设计模式(17):调停者模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 1.场景描述 在公司的日常安排中,通常划分多个部门,每个部门又会分为不同的小组,部门经理的一项核心工作就是协调部门小组之间的工作 ...

  4. 转载: ubuntu13.04下载android4.0.1源码过程

    转自:http://blog.csdn.net/zhanglongit/article/details/9263009,中间有些不行的地方进行了些小修改. 最初我参考的是老罗的博客http://blo ...

  5. windows下如何安装Python虚拟环境

    1.前言 由于Python的版本众多,还有Python2和Python3的争论,因此有些软件包或第三方库就容易出现版本不兼容的问题. 通过 virtualenv 这个工具,就可以构建一系列虚拟的Pyt ...

  6. npm start 的应用 改为forever 后台启动的方法记录

    记录日志的启动方式 forever start -l forever.log -o out.log -e err.log app.js 记录日志的启动方式 forever start -a app.j ...

  7. FastDFS图片服务器单机安装步骤

    前面已经讲 一张图秒懂微服务的网络架构,通过此文章可以了解FastDFS组件中单机安装流程. 单机版架构图 以下为单机FastDFS安装步骤 一.环境准备 CentOS 7.X libfastcomm ...

  8. dianFanEditor Web在线编辑器

    个人很喜欢kodexplorer 的在线编辑器.苦于没有加载FTP目录的功能. 索性自己改造了一下,用.NET 做了几个WEB接口,用CEF3做浏览器内核,打包了在线地址做编辑器. 即可加载本地磁盘, ...

  9. Zabbix日志监控插件

    #!/usr/bin/env python # coding:utf-8 import re import os import sys import logging logging.basicConf ...

  10. Dart编程语言从基础到进阶1

    Dart编程语言从基础到进阶Dart的语言的发展史以及Dart能做什么未来发展怎么样等等问题我们在这里是不讨论的.我相信既然选择了来学习它,那你内心基本已经认可了它,所以我们废话不多说直接进入主题. ...