thinkphp 关联模型 一对一关联 主副表查询

一对一关系查询

users主表

namespace app\model;

use think\Model;

class Users extends Model
{
    // 模型中定义一对一关系的方法 用于建立当前模型与另一个模型之间的关系, 例如: 当前数据表对应的外键表
    // profile 自定义方法名  Profile::class 关联数据表的模型文件类名
    public function profile()
    {
        // hasOne模式 一对一关系查询 在主表里面 查询 副表的数据
        // 主表关联副表 hasOne('关联模型名', ['关联外键','主键']) [users_id, id]
        // 关联模型名 必须的: 关联模型名或者类名 Profile::class
        // 外键:默认的外键是当前模型名(不含命名空间)+_id, 例如: 当前模型名是Users, 默认的外键是users_id
        // 主键:主键是当前模型的主键, 默认会自动获取也可以指定传入
        return $this->hasOne(Profile::class, 'users_id', 'id');
    }
}

profile副表

namespace app\model;

use think\Model;

class Profile extends Model
{
    public function users()
    {
        // belongsTo模式 一对一关系查询 在副表里面 查询 主表的数据
        // 副表关联主表 belongsTo('关联模型名', ['关联外键','主键']) [users_id, id]
        // 关联模型名 必须的: 关联模型名或者类名 Users::class
        return $this->belongsTo(Users::class, 'users_id', 'id');
    }
}

使用的地方 类文件里面

namespace app\controller;

use app\BaseController;
use app\model\Profile;
use app\model\Users;


class Login extends  BaseController
{
    public function index()
    {
        // hasOne 模式 查询副表的信息
        // find(10) 10是副表的users_id
        // $user = Users::find(1);

        // 获取满足的其中一条数据
        // return json($user->profile);

        // 获取满足的全部数据
        // return json($user->abc()->select());

        // 只打印其中一个字段
        // return json($user->profile->hobby);

        // 修改数据
        // $user->profile->save(['hobby' => '篮球'])

        // 新增数据
        // $user->profile()->save(['hobby' => '篮球111'])

        // $user 获取user表的数据  $user->profile 获取profile附表的数据
        // profile 是Users模型中定义的方法
        // return $user->profile;



        // 查询主表的信息一
        // belongsTo 模式 查询主表的信息 需要在 profile 表 创建users方法
        //   find(1) 1是主表的id
        // $profile = Profile::find(1);

        // users 是Profile 副表模型中定义的方法
        // return $profile->users->name;
        // $profile->users->save(['name' => '张三111']);
        // $profile->users()->save(['name' => '张三111']);

        // 查询主表的信息二 不想使用belongsTo方法的话 可以这个方法 就无需再副表中定义users方法了
        // profile 是Users 主表模型中定义的方法
        // $user = Users::hasWhere('profile', ['id' => 3])->find();
        // return $user;
        // 闭包的方式 可以进行判断
        $user = Users::hasWhere('profile', function ($query) {
            $query->where('id', '=', 3);
        })->find();
        return $user;
    }
  }

posted on   完美前端  阅读(140)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示