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的信息

 

posted @ 2019-11-20 09:44  不睡  阅读(2748)  评论(0编辑  收藏  举报