广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >thinkphp关于模型一对多,多对多,多对一的使用
  • 611
分享到

thinkphp关于模型一对多,多对多,多对一的使用

服务器thinkphp模型php一对一Poweredby金山文档 2023-09-01 07:09:14 611人浏览 独家记忆
摘要

首先看看thinkPHP5.0的模型介绍 这里关联有一对一,多对多,一对多,多对一。还有预载入(就是查询预写好,php界面调用时候才查询)还有关联统计,聚合等。这里只讲解通过一对一的预载入,推

  1. 首先看看thinkPHP5.0的模型介绍

这里关联有一对一,多对多,一对多,多对一。还有预载入(就是查询预写好,php界面调用时候才查询)还有关联统计,聚合等。这里只讲解通过一对一的预载入,推出其他的。

  • 这里文档举例了关于Profile和User的一对一关系,

  • Model层

Profile有外键($foreignKey)uid关联到User的id,因为id是默认的字段,可以不用写,所以关联关系这么写

class Profile extends Model{    public functionuser(){        return $this->belongsTo('User','uid');    }}

也可以这么写,这么写是相当于select * from user where id = (?1), ?1是查出的Profile的uid,赋值进去,相当于两次查询,一次查询Profile,然后再查询User

class Profile extends Model{    public functionuser(){        return $this->belongsTo('User','uid','id');    }}
  • 控制层

$profile = Profile::get(1);

这里$profile获取了所有的字段(包扣uid(?1)),相当于select * from profile.第一层查询。然后belongsTo查询才能够继续下去(select * from user where id = (?1))

  1. 实操

写控制层(第一层查询)

$question = new Question();$lists = $question->field('id,question_category,name,right_num,"show",content')->with('questionCategory1')->order('create_time asc')->paginate($this->web_data['list_rows'], false, $page_param);$this->assign([    'lists' => $lists,    'page'  => $lists->render(),    'total' => $lists->total()]);
  • 重点在field里面的question_cateGory,这里查询出了外键为预载入子查询准备

  • with里面是预加载的方法名,也是调用的属性名,例如,本文中的questionCategory1。

写视图层(第二层调用)

{foreach name="lists" item="list"}        {$list.id}        {$list.name}    {$list.content}    {$list.right_num}    {$list->questionCategory1['title']}            {if condition="$list.show eq '1'"}已显示        {else /} 已隐藏        {/if}                {if condition="$list.show eq '1'"}                                            隐藏                    {else /}                                            修改                                                       显示                                                        删除                    {/if}    {/foreach}
  • 这里的${lists}是后台传参(assign)过来的参数,是个对象数组,通过循环显示在界面上。

{$list->questionCategory1['title']}就是调用了questionCategory1这个方法,取到里面的title属性,这里调用触发了预加载功能

写模型层

  • Question

namespace app\common\model;use think\Model;class Question extends Model{    protected $name = 'question';    public function questionAnswer() {        return $this->hasMany("QuestionAnswer", "question_id", "id");    }        //注意这里的questionCategory1特地加1是因为防止和和question_category的驼峰一致导致报错    //这里field一定要查询出QuestionCategory的主键id,因为这个作为第二层查询的条件,如果去掉id会报错    //这里的QuestionCategory的主键是id,question_category是Question的外键(关联QuestionCategory)    public function questionCategory1()    {        return $this->belongsTo('QuestionCategory','question_category','id')->field('id,title');    }}

A:这里的Question的预加载方法是questionCategory1(声明),跟控制层的with(预加载)匹配,也跟视图层的questionCategory1(调用)匹配

B:然后从属关系,是一对一的QuestionCategory和Question,外键在Question上,外键名字是question_category,主键在QuestionCategory上的id

C:belongsTo的field代表Question这个模型的方法questionCategory1预加载了模型QuestionCategory的id和title属性,id作为第二次查询的条件和第一层查出来的question_category匹配作为条件

D:而且question_category不能和方法名驼峰一致。必须不相同。例如该方法的questionCategory和question_category相同会报错。所以改成了questionCategory1方法名

  • QuestionCategory

namespace app\common\model;use think\Model;class QuestionCategory extends Model{    protected $name = 'question_category';}

同理推得一对多

    public function questionAnswer() {        return $this->hasMany("QuestionAnswer", "question_id", "id");    }

同理推理的一对一

 public function adminLogData()    {        return $this->hasOne('AdminLogData','log_id','id')->field('data_id,log_id,data');    }

等等

来源地址:https://blog.csdn.net/weixin_36667844/article/details/128931779

--结束END--

本文标题: thinkphp关于模型一对多,多对多,多对一的使用

本文链接: https://www.lsjlt.com/news/387713.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • thinkphp关于模型一对多,多对多,多对一的使用
    首先看看thinkphp5.0的模型介绍 这里关联有一对一,多对多,一对多,多对一。还有预载入(就是查询预写好,php界面调用时候才查询)还有关联统计,聚合等。这里只讲解通过一对一的预载入,推...
    99+
    2023-09-01
    服务器 thinkphp 模型 php 一对一 Powered by 金山文档
  • Spring Boot 整合JPA 数据模型关联使用操作(一对一、一对多、多对多)
    目录表关联一对一一对多和多对一多对多表关联 上一篇介绍了JPA的简单使用,这一篇介绍JPA在表关联上的使用 一对一 配置参数JPA对于数据实体一对一映射使用的是@OneToOne注解...
    99+
    2022-11-13
  • Flasksqlalchemy一对多与多对一与一对一及多对多关系介绍
    目录配置项定义外键定义关系属性双向的关系属性使用关系属性添加数据一对一多对多这里以作者和文章来演示一对多的关系:一个作者可以有多篇文章,但是一篇文章只能有一个作者。 配置项 首先,配...
    99+
    2022-11-11
  • SpringDataJpa的使用之一对一、一对多、多对多 关系映射问题
    目录SpringDataJpa的使用 -- 一对一、一对多、多对多 关系映射项目依赖项目配置sql文件(MySQL版)级联关系简述@OneToOne 一对一 关系映射1.无中间表,维...
    99+
    2022-11-13
  • Hibernate的一对一,一对多/多对一关联保存的实现
    目录一对一关联保存:留言表实体类配置:(主表)留言内容表配置:(从表)留言表hbm.xml配置:(主表)留言内容表hbm.xml配置:(从表)一对多/多对一保存活动表实体类配置:(主...
    99+
    2022-11-12
  • MySQL创建多对多和一对一关系方法
    目录一、创建多对多1.学生表2.课程表3.中间表4.插入数据5.查询学生1选了哪些科目6.查询id=2数学被谁选了 二、MySQL 创建一对一关系1.一对一2.插入数据一、...
    99+
    2022-11-13
  • MySQL如何创建多对多和一对一关系
    这篇文章主要介绍“MySQL如何创建多对多和一对一关系”,在日常操作中,相信很多人在MySQL如何创建多对多和一对一关系问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL如何创建多对多和一对一关系”的疑...
    99+
    2023-06-29
  • 使用Mybatis 如何实现多对一或一对多的关联查询
    使用Mybatis 如何实现多对一或一对多的关联查询?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先  数据库量表之间字段关系(没有主外键)studentmaj...
    99+
    2023-05-31
    mybatis 一对多 多对一
  • Java Hibernate中一对多和多对多关系的映射方式
    目录Hibernate的一对多和多对多Hibernate的一对多Hibernate的一对多配置Hibernate的一对多操作Hibernate的多对多Hibernate的多对多配置H...
    99+
    2023-05-18
    Java Hibernate一对多 Java Hibernate多对多
  • 关于mybatis一对一查询一对多查询遇到的问题
    springboot整合mybatis项目博客系统文章,相册,评论,标签,等表IDEA为最新版2021.3.3,mysql数据库为最新版Navicat(或许有些字段不支持特定的命名)...
    99+
    2022-11-13
  • 图文详解laravel多对多关联模型
    关联模型(多对多) 多对多关系(抽象) 例:一篇文章可能有多个关键词,一个关键词可能被多个文章使用。 关键词表: 字段id ...
    99+
    2022-11-12
  • laravel多对多关联模型的示例分析
    这篇文章给大家分享的是有关laravel多对多关联模型的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。关联模型(多对多)多对多关系(抽象)例:一篇文章可能有多个关键词,一个关键词可能被多个文章使用。 关键...
    99+
    2023-06-20
  • Mybatis一对多和多对一处理的深入讲解
    目录建表 多对一处理 mapper实体类按照查询嵌套处理按照结果嵌套处理回顾Mysql多对一查询方式一对多处理mapper实体类按照查询嵌套处理按照查询嵌套处理结果映射面试高频点总结...
    99+
    2022-11-12
  • hibernate 一对多 关系映射
    在关系中,或多或少的表之间有复杂的关联关系这里测试 一对多 关联关系的配置开发步骤就不多说了。直接看一个示例。users 用户 和  shop商品订单表分析:一个用户可以有多个商品订单,一个订单只...
    99+
    2022-10-18
  • MyBatis中多对一和一对多数据的处理方法
    目录多对一的处理1、数据库设计2、搭建测试环境3、按查询嵌套处理4 、按结果嵌套处理一对多的处理1、实体类编写2、按结果嵌套处理3、按查询嵌套处理4、小结多对一的处理 多对一的理解:...
    99+
    2023-01-03
    MyBatis多对一 MyBatis一对多处理
  • Mybatis怎么实现一对一、一对多关联查询
    今天小编给大家分享一下Mybatis怎么实现一对一、一对多关联查询的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Mybati...
    99+
    2023-07-05
  • Mybatis使用@one和@Many实现一对一及一对多关联查询
    目录一、准备工作1.创建springboot项目,项目结构如下2.添加pom.xml配置信息3.配置相关信息二、使用@One注解实现一对一关联查询三、使用@Many注解实现一对多关联...
    99+
    2022-11-12
  • mybatis的一对多映射
        延续mybatis的一对一问题,还是上面一对一举得那个例子(http://fengcl.blog.51cto.com/9961331/1875657),如果一...
    99+
    2022-10-18
  • 使用JPA单项一对多外键关联
    目录JPA单项一对多外键关联JPA外键关联保存踩坑解决JPA单项一对多外键关联 一对多即一个对象中包含又另外一个对象的集合。 User主表代码 @Table(name="USER")...
    99+
    2022-11-13
  • 如何使用bulk_update一次更新多个模型对象
    您可以使用`bulk_update`一次更新多个模型对象。下面是一个使用`bulk_update`的示例代码:```pyt...
    99+
    2023-09-17
    对象
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作