TP中的模型关联的多对多关系

TP5中完全推翻了3.2的做法,不再使用原来的查询语句,比如select,join之类的条件查询。而是使用模型关联,一对多和多对多的关系进行关联。方便用户调用数据,减少代码的编写量。

下面直接开始上代码:

role.php(model层)

class Role extends Model{

public function Nodes()

{

return $this->belongsToMany(‘Node‘,‘RoleAuthorization‘,‘node_id‘,‘role_id‘);

}

}

user.php(model层)

class User extends Model{

public function Roles(){

return  $this->belongsToMany(‘Role‘,‘RoleUser‘,‘pms_role_id‘,‘pms_user_id‘);

}

}

另外几张表只需要写一个模型就OK,不用写任何东西,它会自动调用。(node,roleauthorization,roleuser)

在控制器调用model,直接实例化,调用你写的方法

$user_model  = Loader::model(‘User‘);

$user_result = $user_model->get(1);

echo $user_result.‘<br/>‘;

$data = $user_result->Roles;

foreach ($data as $key => $value) {

echo $value[‘id‘].‘<br/>‘;

echo $value[‘name‘].‘<br/>‘;

// $aa = $data->Nodes;

// dump($value->Nodes);

foreach ($value->Nodes as $pk=>$pv){

echo $pv->node."<br/>";

}

}

首先,字段pms_role_id,pms_user_id字段在中间表roleuser里,注意字段的顺序,根据你关联表的顺序来进行写的,顺序错误数据就会不对。node_id,role_id字段在roleauthorization表里。

时间: 2024-08-02 06:57:43

TP中的模型关联的多对多关系的相关文章

laravel 模型关联之(多对多)

多对多 多对多就相当于一个专题Topic有多个文章,但是这多个文章又属于多个专题, 而且多对都必须有一个表是他们之间的关联关系表PostTopic Post表和Topic表之间没有直接的关联,而且通过关联关系表关联的 如果说你用的是一多多来获取一个专题的文章的时候, Post模型对应的是PostTopic,但是你只能获取到文章的ID,反而又麻烦 第一个参数就是要获取的模型(Posts) 第二个参数就是把这两个模型关联起来的关联关系表(TopicPost) 第三个参数就是TopicPost表中和当

flask中一对一,一对多以及多对多关系的设定

一对多关系: class Grade(db.Model): id=db.Column(db.Integer,primary_key=True) name=db.Column(db.String(20),nullable=False) num = db.Column(db.Integer, default=0) time = db.Column(db.String(20), default='2018-01-01') students=db.relationship('Student',backr

laravel中的模型关联之(一对一)

一对一 一对一的关联关系就相当于,赞和文章之间的关系,一个用户只能赞一次一个文章,只能和文章发生一次关系, 用户和赞的文章是唯一的一份,这里举得是判断用户是否赞过某个文章 一个参数都是你要获取的模型,第二个参数就是获取的模型的外键,第三个参数是当前模型的主键 这里用的是判断当前登陆的用户是否赞过,就是判断是否存在,如果存在就显示取消赞,没有那就是显示赞 原文地址:https://www.cnblogs.com/wlphp/p/8214816.html

Hibernate,关系映射的多对一单向关联、多对一双向关联、一对一主键关联、一对一外键关联、多对多关系关联

2018-11-10  22:27:02开始写 下图内容ORM.Hibernate介绍.hibername.cfg.xml结构: 下图内容hibernate映射文件结构介绍 下图内容hibernate映射文件中主键自增规则.Hibernate实例状态(瞬时状态.持久化状态.托管状态).Hibernate初始化类获取session等方法 下图内容保存数据过程 下面内容保存数据顺序.查询数据方法 get().load()和延迟加载.删除数据 下图内容删除对象顺序.修改数据顺序 下面内容关联关系映射.

[NHibernate]多对多关系(关联查询)

目录 写在前面 文档与系列文章 多对多关系关联查询 总结 写在前面 上篇文章介绍了nhibernate中对一对多关系进行关联查询的几种方式,以及在使用过程需要注意的问题.这篇文章对多对多关系的查询处理也采用上篇文章的描述方式进行说明. 文档与系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate]O/R Mapping基础 [NHibernate]集合

关联映射 ---- Hibernate之多对多关系

叙:上一章详细的记录了关联映射中的"一对多|多对一"关系.级联操作.关系的维护等知识点,本章节轻风学习记录的是级联关系中的"多对多"关系: Hibernate的"多对多"级联关系 1. 介绍 在生活中很多关系都是多对多的,比如一个人在公司是技术部的同时也是营销部的(只是个例子),所以,多对对关系是很普遍的,一个对象有多个角色,而一个角色又可以有多个对象,因此最正确的做法是在对象与角色之间创建一个新的表,用来保存对象和角色的主键,方便调用查看相应的

《Entity Framework 6 Recipes》翻译系列 (5) -----第二章 实体数据建模基础之有载荷和无载荷的多对多关系建模 (转)

2-3 无载荷(with NO Payload)的多对多关系建模 问题 在数据库中,存在通过一张链接表来关联两张表的情况.链接表仅包含连接两张表形成多对多关系的外键,你需要把这两张多对多关系的表导入到实体框架模型中. 解决方案 我们设想,你数据库中的表与图2-10一样. 图2-10 艺术家和专辑多对多关系 按下面的步骤将这些表和关系导入到模型中: 1.右键你的项目,选择Add(增加) ?New Item(新建项),然后选择Visual C#条目下的Data模板下的ADO.NET Entity D

数据库联合外键做主键(解决多对多关系)

多对多概念:一个学生可以学好几门课程,一门课程可以被好几个学生学习,站在某一个学生的角度就对应了多个课程,站在课程那里,就对应了多个学生,所以学生和课程就是一个简单的多对多关系. 在数据库中我们要解决这种多对多关系的应用,首先创建一个学生表,如 create table stu ( stu_id int primary key, sty_name varchar(20) ); 然后再创建一个课程表 create table book( book_id int primary key, book_

EntityFrameWork 多对多关系处理

场景2: 一个文章类别(Category)下含有多篇文章(Article),而文章也可能对应多个类别 Article和Category的代码更改如下: /// <summary> /// 文章信息 /// </summary> public class Article:ModelBase { /// <summary> /// 类别名字 /// </summary> public string Name { get; set; } public IColle