• 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 appdemomodel;
    use thinkModel;
    
    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的信息

  • 相关阅读:
    pm2进阶使用
    javascript装饰器模式
    pupeteer初体验
    重构:从Promise到Async/Await
    # electron-vue 尝试做个网易云音乐
    Kafka监控:主要性能指标
    生产环境Rabbitmq集群安装部署与配置
    Java同步块(synchronized block)
    RabbitMQ高可用镜像队列
    kafka-0.9消费者新API
  • 原文地址:https://www.cnblogs.com/bushui/p/11893428.html
Copyright © 2020-2023  润新知