首页 > 编程语言 >thinkphp模型hasOne、hasMany、belongsTo详解

thinkphp模型hasOne、hasMany、belongsTo详解

时间:2024-05-09 18:22:21浏览次数:16  
标签:Author 模型 author hasOne hasMany Book thinkphp Model id

在ThinkPHP框架中,hasOnehasManybelongsTo是用于定义模型间一对多(1:n)、一对一(1:1)和多对一(n:1)关联关系的方法。以下是一些简单的示例来解释这些关系:

1. hasOne (一对一关系)

假设我们有AuthorProfile两个模型,一个作者(Author)有一个个人资料(Profile):

// Author 模型
namespace app\common\model;
use think\Model;

class Author extends Model
{
    public function profile()
    {
        return $this->hasOne('Profile', 'author_id', 'id');
    }
}

// Profile 模型
namespace app\common\model;
use think\Model;

class Profile extends Model
{
    // Profile 模型通常不需要定义反向关联,因为Author已经定义了hasOne
}

在这个例子中:

  • hasOne的第一个参数 'Profile' 是关联模型的类名。
  • 第二个参数 'author_id' 是Profile模型中的外键字段,它引用Author模型的主键。
  • 第三个参数 'id' 是Author模型的主键字段。

2. hasMany (一对多关系)

假设我们有AuthorBook两个模型,一个作者(Author)可以写很多书(Book):

// Author 模型
namespace app\common\model;
use think\Model;

class Author extends Model
{
    public function books()
    {
        return $this->hasMany('Book', 'author_id', 'id');
    }
}

// Book 模型
namespace app\common\model;
use think\Model;

class Book extends Model
{
    // 不需要在Book模型中定义反向关联,因为Author已经定义了hasMany
}

  在这个例子中:

  • hasMany的第一个参数 'Book' 是关联模型的类名。
  • 第二个参数 'author_id' 是Book模型中的外键字段,它引用Author模型的主键。
  • 第三个参数 'id' 是Author模型的主键字段。

3. belongsTo (多对一关系)

假设我们有BookAuthor两个模型,一本书(Book)属于一个作者(Author):

// Book 模型
namespace app\common\model;
use think\Model;

class Book extends Model
{
    public function author()
    {
        return $this->belongsTo('Author', 'author_id', 'id');
    }
}

// Author 模型
namespace app\common\model;
use think\Model;

class Author extends Model
{
    // 可选:如果需要在Author模型中访问Book,可以定义反向关联
    public function books()
    {
        return $this->hasMany('Book', 'author_id', 'id');
    }
}

  在这个例子中:

  • belongsTo的第一个参数 'Author' 是关联模型的类名。
  • 第二个参数 'author_id' 是Book模型中的外键字段,它引用Author模型的主键。
  • 第三个参数 'id' 是Author模型的主键字段。

在实际应用中,你可以根据业务逻辑来定义这些关联,以便更方便地处理数据。例如,当你获取一个Author实例时,可以通过$author->profile来获取作者的个人资料,或者通过$author->books获取该作者写的书。同样,获取一个Book实例时,可以使用$book->author来获取书籍的作者。

 

标签:Author,模型,author,hasOne,hasMany,Book,thinkphp,Model,id
From: https://www.cnblogs.com/flzs/p/18182885

相关文章

  • ThinkPHP6 多模型关联查询操作记录
    新入职后组长安排了一个小的管理项目来检验能力,后发现自身对于ThinkPHP框架中的模型关联属于一窍不通,故被终止项目叫楼主去恶补ThinkPHP6框架知识。对于多联表查询之前本人一直使用join方法,但是此方法对于代码效率和维护都有较大影响,故在此尝试使用ThinkPHP框架内置的模型......
  • thinkphp6.0
    <?phpnamespaceapp\controller;useapp\BaseController;usethink\facade\Db;classIndexextendsBaseController{publicfunctionindex13(){#$query=Db::query("select*frombetty13");#print_r($query);#$execu......
  • ThinkPHP-数据库操作---查
    //find单条数据查询//查询单条数据Db::name('user')->where('id',1)->find();//查询单条数据如果没有数据抛出errorDb::name('user')->where('id',1)->findOrFail();//查询单挑数据查询单条数据如果没有数据返回一个空数组Db::name('user')->whe......
  • Thinkphp5.x全漏洞复现分析
    基础知识命名空间和子命名空间我们可以把namespace理解为一个单独的空间,事实上它也就是一个空间而已,子命名空间那就是空间里再划分几个小空间,举个例子:<?phpnamespaceanimal\cat;classcat{publicfunction__construct(){echo"meow"."\n";}}namespacean......
  • ThinkPHP使用Redis
    前置环境安装Redis新建一个ThinkPHP6项目ThinkPHP使用Redis安装Redis扩展#在项目目录下执行如下代码,安装redis依赖composerrequiretopthink/think-redisconfig/database.php'redis'=>[//默认数据连接标识'default'=>['host'=>e......
  • thinkphp 页面寻址
    http://laremehpe.test.org/index.php/index/user/indexhttp://laremehpe.test.org:  url地址      /index.php:  public目录下的入口文件         /index:    application目录下的文件夹名字如果没有文件夹则忽略        /user: ......
  • thinkphp+vue跨域报错解决方案
     使用vue的axios.post向后台服务器的发送数据时报错:CORSpolicy:Responsetopreflightrequestdoesn'tpassaccesscontrolcheck:No'Access-Control-Allow-Origin'headerispresentontherequestedresource. 解决办法在public/index.php文件中添加以下代码://......
  • 社交圈子系统,包含Uni前端源码 ,App+H5+小程序 ,后端thinkphp源码+商业版
    系统介绍系统基于TP6+Uni-app框架开发;客户移动端采用uni-app开发,管理后台TH6开发。系统支持微信公众号端、微信小程序端、H5端、PC端多端账号同步,可快速打包生成APP;我们为你准备了完善的后台管理,不需要你懂PHP,按照教程10分钟安装完即可使用,堪比深夜的杜蕾斯还方便。......
  • ThinkPHP 实现简单的缓存锁
    使用ThinkPHP实现简单的缓存锁在开发过程中,为了避免重复提交等问题,我们常常需要使用缓存锁来控制并发访问。本文将介绍如何利用ThinkPHP框架实现一个简单的缓存锁功能。锁Key的生成在实现缓存锁之前,首先需要确定锁的唯一标识,这里我们采用了学生ID和费用数据ID......
  • thinkphp+Laravel+vue实验室预约课程管理系统t1g73
     Laravel非常的简洁并且是开源的,Laravel是一个具有表现力、优雅语法的Web应用程序框架.Laravel是构建现代全栈Web应用程序的最佳选择.它的语法更富有表现力,拥有高质量的文档和丰富的扩展包,技术上它有Bundle扩展包、EloquentORM、反向路由、迁移、Restful控制器、自......