首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用laravel 5.3创建与4个表的“多个直通”关系

在 Laravel 5.3 中,可以使用 Eloquent ORM 来创建多对多关系。多对多关系表示两个表之间存在多对多的关联关系,需要通过一个中间表来实现。

以下是使用 Laravel 5.3 创建与4个表的多对多关系的步骤:

  1. 创建数据库表: 首先,需要创建4个表,分别是表A、表B、表C和中间表AB。这些表可以使用 Laravel 的数据库迁移工具来创建,具体步骤如下:
    • 创建表A的迁移文件:运行 php artisan make:migration create_table_a --create=a 命令,然后在生成的迁移文件中定义表A的字段。
    • 创建表B的迁移文件:运行 php artisan make:migration create_table_b --create=b 命令,然后在生成的迁移文件中定义表B的字段。
    • 创建表C的迁移文件:运行 php artisan make:migration create_table_c --create=c 命令,然后在生成的迁移文件中定义表C的字段。
    • 创建中间表AB的迁移文件:运行 php artisan make:migration create_table_ab --create=ab 命令,然后在生成的迁移文件中定义中间表AB的字段。
  2. 定义模型: 在 Laravel 中,每个表对应一个模型。可以使用以下命令来生成这些模型:
    • 运行 php artisan make:model A 命令,生成与表A对应的模型。
    • 运行 php artisan make:model B 命令,生成与表B对应的模型。
    • 运行 php artisan make:model C 命令,生成与表C对应的模型。
  3. 定义关联关系: 在每个模型中,使用 Eloquent 的关联方法来定义多对多关系。具体步骤如下:
    • 在 A 模型中,使用 belongsToMany 方法定义与表B的多对多关系:return $this->belongsToMany(B::class, 'ab', 'a_id', 'b_id');
    • 在 B 模型中,使用 belongsToMany 方法定义与表A的多对多关系:return $this->belongsToMany(A::class, 'ab', 'b_id', 'a_id');
    • 在 B 模型中,使用 belongsToMany 方法定义与表C的多对多关系:return $this->belongsToMany(C::class, 'ab', 'b_id', 'c_id');
    • 在 C 模型中,使用 belongsToMany 方法定义与表B的多对多关系:return $this->belongsToMany(B::class, 'ab', 'c_id', 'b_id');
  4. 使用关联关系: 在代码中,可以使用定义的关联关系来进行查询和操作。例如,可以使用以下代码来获取表A关联的所有表B记录:$a = A::find(1); $bRecords = $a->b;

以上是使用 Laravel 5.3 创建与4个表的多对多关系的步骤。在实际应用中,可以根据具体需求进行调整和扩展。如果需要更详细的信息,可以参考 Laravel 官方文档中关于多对多关系的章节:https://laravel.com/docs/5.3/eloquent-relationships#many-to-many

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django——ContentType(多个建立外键关系)及ContentType-signals使用

例如,我们在自己app中创建了如下几个model:post,event。迁移之后,我们来查看一下ContentType這个数据中生成数据:   如上图,生成了appmodel对应关系。...post相关联所有事件,最重要一点是如果没有这个字段,那么当删除一篇post时候,该post关联事件是不会自动删除。...是再给上面的增加一个外键,然后重新修改数据库么?显然是不能,一旦数据库被创建了,我们几乎很少再去修改数据,如果再给其添加额外字段,无疑会带来不必要麻烦。...根据以上需求,我们很快就知道,需要三张,学位课程,课程以及优惠券,那么,这三张又是如何关联呢?   ...总之,如果一个与其他多个外键关系,我们可以通过ContentType来解决这种关联。

4.3K20

orm 系列 之 Eloquent演化历程2

: 接着,我们看看是怎么使用Blueprint,下看创建table $grammar = new Illuminate\Database\Schema\Grammars\MySqlGrammar; $...本文最后讲下Eloquent中新增对象之间关系:多态关系,以下内容摘自[ Laravel 5.3 文档 ] Eloquent ORM —— 关联关系 结构 多态关联允许一个模型在单个关联下属于多个不同模型...例如,假设应用用户既可以对文章进行评论也可以对视频进行评论,使用多态关联,你可以在这两种场景下使用单个comments,首先,让我们看看构建这种关联关系需要结构: posts id - integer...5.3 文档 ] Eloquent ORM —— 关联关系,接下去让我们看下这是怎么实现?...参考 [ Laravel 5.3 文档 ] Eloquent ORM —— 关联关系

2.4K30

Laravel5.1 框架模型创建使用方法实例分析

本文实例讲述了Laravel5.1 框架模型创建使用方法。...分享给大家供大家参考,具体如下: Laravel模型也是访问数据库,它更加面向对象,一个模型对应着一张 我们可以使用模型对数据做一些增删改查操作。...2 模型常用属性 2.1 自定义名 一个model对应一个,model对应名默认是model名字复数 即:Article(Model)对应Articles(Table),User(Model)...2.3 时间戳 在咱数据之中 有create_at 和 update_at 两个时间戳 是Laravel自动管理,如果你不想要自动管理这两个列 可以这样做: class Article extends...更多关于Laravel相关内容感兴趣读者可查看本站专题:《Laravel框架入门进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及

1.9K71

Laravel 模型关联基础教程详解

如果你不完全理解 Laravel 关联在这一点上是如何工作,别担心,读完这篇文章后,你会更好地理解它。 我们应该使用哪个模型关联? 要回答这个问题,首先你要知道有哪些可用选项。...默认情况下,Laravel会假设你在用户模型中定义了 passport_id ,因为你试图创建 passport 模型关联。创建迁移文件时也请注意这一点!...你可以通过创建迁移文件在 Laravel创建此中间。 远程关联 远程一对一 has one through 关联通过单个中间关联模型实现。...不包含 supplier_id 列,供应商也可以通过使用 「has one through」 关系访问 product_history 记录。...让我们使用前面的示例,但我们改变一件事:产品现在可以有多个历史条目而不是一个。 数据库保持不变。 <?

5.5K31

具有嵌套关系可重用API资源——Laravel5.5

本文内容主要围绕在 Laravel 5.5 中使用 API 开发重要步骤,着重介绍如何利用 Laravel API 资源(Resource)和控制器(Controller)进行多因素身份验证(MFA...注:本文受到Laravel创始人Taylor Otwell介绍使用 Laravel5.5 开发API时如何替换 Fractal 启发。 1....这个文件包含了使用 Laravel 迁移(Migration)功能创建数据库代码。· posts工厂database/factories/PostFactory.php<?...也就是在 app 目录下 User.php 文件中,你会定义用户和posts之间关联关系,比如一对多关系(一个用户有多个posts)或其他关系。· 避免批量赋值app/Post.php<?...简化和逐步进行本文着重于学习如何使用 Resource::collection 而不是手动实例化类,并将关系数据提供(或不提供)责任委托给控制器。

12010

Laravel框架关键技术解析

一、组件化开发composer使用 A.组件化开发 B.composer使用 C.手动构建Laravel框架 1.index.php:自动加载函数添加、服务容器实例化服务注册、路由加载、请求实例化路由分发...3.Laravel框架中应用:大量使用,如在服务提供者注册过程中,通过将服务名称提供服务匿名函数进行绑定,在使用时可以实现动态服务解析。...多个trait通过逗号分隔,通过use关键字列出多个trait 冲突解决:如果两个trait都插入了一个同名方法,若没有明确解决冲突将会产生一个致命错误,使用insteadof操作符来明确指定使用哪一个.../laravel5.4cn 十、数据库及操作 A.数据库迁移填充 1.Laravel数据库迁移其实是定义了一个统一接口来实现数据库架构创建和维护,而这种统一接口底层数据库及其操作语言都是无关...\Eloquent\Builder 2.ORM映射最大好处是将数据结构映射成一个类对象,可以将数据以对象形式封装使用,程序编写将变得高效而且结构清晰 3.对于多个而且间存在不同关系时,如果使用不好会严重影响程序性能

11.9K20

laravel5.3新功能尝鲜

上一节课 https://my.oschina.net/lilugirl2005/blog/783370 上一节课我们讲了laravel5.3安装,这节讲laravel5.3一些基础命令和配置 Listeners...文件夹 进入laravel项目目录输入命令 创建用户注册事件监听 看看 php artisan make:listener UserSignUpListener --event=UserSignUp...toggle功能 这里通过用户点击收藏文章场景展示toggle功能 这里用户和文章收藏关系是多对多 先生成假数据 post 和收藏 favorites 输入命令 php artisan make:...然后检查数据库 发现favorites自动生成了一条记录 ? 相反detach可以删除关系 ? favorites数据库为空 ? toggle使用 ?...Notify:站内信通知 (通过database记录) 站内信通知是将通知消息存储到数据库中,需要先建立对应数据 输入以下命令创建 php artisan notifications:table

92820

爬虫+反爬虫+js代码混淆

选用适合字段类型,避免数据库增加不必要空间,字段尽量设定为NOTNULL,类似性别,省份尽量使用枚举类型ENUM 使用JOIN查询代替子查询 使用UNION代替临时 尽量不使用外键、除非必须保持数据之间一致性...、完整性 尽量不使用视图 分分库,读写分离 合理设置主键及索引 索引分为:普通索引、唯一索引、全文索引、主键(也是一种唯一索引) 后期演变数据优化 垂直拆分:数据拆分到不同中,按照业务拆分 水平拆分...里氏替换原则 当一个子类实例应该能够替换任何其父类实例时,它们之间才具有IS-A关系 ISP 接口隔离原则 不要强迫客户端(泛指调用者)去依赖那些他们不使用接口 DIP 依赖反转原则 高层模块不应该依赖底层模块...关系....FastCGI 用来提高cgi程序性能,启动一个master,再启动多个worker,不需要每次解析php.ini 而php-fpm实现了fastcgi协议,是fastcgi进程管理器,支持平滑重启可以启动时候预先生成多个进程

10.5K30

为什么 Laravel 这么优秀?

因为我们已经完成了数据中字段定义、关系、以及最重要一步:如何将数据及数据之间关系写入数据库中,下面简单来介绍下在 Laravel如何完成。...比如你在上一次变更操作中错误设置了某个索引,那我理解正确做法不是回滚,而是创建一个新迁移文件,并在新迁移文件中 ALTER 之前修改。...另一个强大之处在于可以通过 Eloquent 抽象「模型模型」之间关系;举个例子,在下面的定义中我们描述了一个 Course 可以有多个 Student、一个 Teacher;以及一个 Student...to use pest 家务:切换到使用害虫 add testing for create course endpoint 为创建课程终点添加测试 我们知道在进行数据操作前,都需要先对数据进行校验。...强大辅助函数和丰富 API,在下面的代码中我们甚至可以做到一行代码就完成课程创建及依赖关系更新。

17210

php系列二之phpstorm Xdebug和laravel常见问题整理

如果要将这些文件添加到库中生成对应则需要执行 php artisan migrate 2. 更新依赖时出问题了如何解决?...Laravel 源码结构 app:网站业务逻辑代码,例如:控制器/模型/路由等 bootstrap:框架启动自动加载设置相关文件 config:网站各种配置文件 database:数据库操作相关文件...5. phpstorm 中使用 laravel 方法 安装 Laravel Plugin 插件 安装 Laravel IDE Helper 代码提示 5.1....使用 composer 安装插件 composer require barryvdh/laravel-ide-helper 在 config 目录里 app.php 文件中'providers'添加如下内容...如何查看 phpinfo 创建一个简单文本文档并命名为 phpinfo.php 代码如下: <?php phpinfo(); ?

3.2K20

初中级PHP面试基础汇总

选用适合字段类型,避免数据库增加不必要空间,字段尽量设定为NOTNULL,类似性别,省份尽量使用枚举类型ENUM 使用JOIN查询代替子查询 使用UNION代替临时 尽量不使用外键、除非必须保持数据之间一致性...、完整性 尽量不使用视图 分分库,读写分离 合理设置主键及索引 索引分为:普通索引、唯一索引、全文索引、主键(也是一种唯一索引) 后期演变数据优化 垂直拆分:数据拆分到不同中,按照业务拆分...,对修改闭合 LSP 里氏替换原则 当一个子类实例应该能够替换任何其父类实例时,它们之间才具有IS-A关系 ISP 接口隔离原则 不要强迫客户端(泛指调用者)去依赖那些他们不使用接口 DIP...NGINX关系....Redis 如何实现持久化?

1.3K10

Laravel代码简洁之道和性能优化

思考:如何提高Model层查询DB效率?如何精简代码?...IGNORE 支持 先简单说明一下业务场景: 首先结构设计是:互相喜欢和添加联系人都是双向关系,即入库A B,B A这样成对双向数据 触发互相喜欢,插入2条双向数据,插入之前校验是否存在,存在不重复添加...如果互相喜欢,则添加双向联系人关系,插入之前校验是否存在,存在则更新type等字段,不存在则插入双向数据 我们通过这个场景能非常好体会laravel-upsert强大,不仅减少了代码量,也减少了sql...这可以是单个记录或多个记录。 第二个参数是唯一标识记录列。除 SQL Server 外所有数据库都要求这些列具有PRIMARY或UNIQUE索引。 提供要更新列作为第三个参数(可选)。...作为使用复合键和原始表达式示例,请考虑以下表,该计算每个帖子和每天访问者: Schema :: create ( 'stats' , function ( Blueprint $ table )

5.7K20

Laravel Eloquent 模型关联关系(下)

今天我们将在定义好模型关联基础上进行关联查询、插入和更新操作,看看如何借助模型关联提高代码可读性并提高编码效率。...此外,你还可以通过数组传递多个关联关系一次统计多个字段,还可以通过闭包函数指定对应统计过滤条件: $post = Post::withCount(['tags', 'comments' => function...这样,我们就不需要在每个地方去判断如果文章作者信息为空该如何处理了,因为这种情况下返回也是一个正常 User 模型实例。...对于那些已存在标签记录,我们可以通过更高效方法文章进行关联关系绑定和解除,这个方法就是 sync,调用该方法时只需传入刚创建/更新后文章标签对应 ID 值,至于哪些之前不存在关联需要绑定,哪些存在关联需要解除...protected $touches = [ 'commentable' ]; 属性值是对应关联方法名称,支持配置多个关联关系

19.5K30

初中级 PHP 面试基础汇总

选用适合字段类型,避免数据库增加不必要空间,字段尽量设定为NOTNULL,类似性别,省份尽量使用枚举类型ENUM 使用JOIN查询代替子查询 使用UNION代替临时 尽量不使用外键、除非必须保持数据之间一致性...、完整性 尽量不使用视图 分分库,读写分离 合理设置主键及索引 索引分为:普通索引、唯一索引、全文索引、主键(也是一种唯一索引) 后期演变数据优化 垂直拆分:数据拆分到不同中,按照业务拆分 水平拆分...里氏替换原则 当一个子类实例应该能够替换任何其父类实例时,它们之间才具有IS-A关系 ISP 接口隔离原则 不要强迫客户端(泛指调用者)去依赖那些他们不使用接口 DIP 依赖反转原则 高层模块不应该依赖底层模块...子类重写父类protected方法有什么限制? final修饰类方法不可被子类重写 5.3以后方法参数个数必须一致 重写时访问级别只可以等于或者宽松于当前重写方法访问级别 什么是CGI?...关系

1.1K20

【译】深入研究 Laravel 依赖注入容器

依赖注入简介 我不会尝试在这里解释DI/IOC背后原理,如果你不熟悉它们,你可能需要去阅读由Fabien Potencier(Symfony框架作者)创建什么是依赖注入 访问容器 在Laravel中有几种访问...单例(Singletons) 在使用自动绑定和 bind()时,每次需要时都会创建一个新实例(或者调用闭包)。...,她忽略了任何现有的实例或单例,并且可以用于创建具有不同参数多个实例,同时依然注入依赖关系: class Post { public function __construct(Database...5.3 以及以下版本中,它很简单 make($class,$parameters), 但在 Laravel 5.4中被删除, 但在5.4.16 被重新添加为 makeWith() 。...在Laravel 5.5 可能会 恢复到Laravel 5.3 语法._ 其他方法 这里涵盖了我认为有用所有方法,但只是为了整理一些内容。

4.6K70

基于独立 Laravel Eloquent 组件编写 ORM 模型类

模型类负责数据库进行交互,这里模型指的是数据模型,一个模型类对应一张数据,数据字段会映射为模型类属性,我们可以通过模型类提供方法实现对应数据表记录增删改查,这样一来,我们就将原来面向过程数据库操作转化为面向对象风格编程...我们把这种对象数据映射称之为对象关系映射(Object Relational Mapping),简称 ORM。...)和数据持久层是完全分离,模型类操作数据更新之间通过 EntityManager 来维护,上层操作模型类完全不需要和数据库有任何关联。...下载 Eloquent ORM 相关扩展包 Eloquent ORM 作为 Laravel 框架自带 ORM 实现,还可以在 Laravel 框架之外作为独立 ORM 组件使用。...Post 模型实例(一对多关联),这种关联关系数据表记录关联关系对应,具体细节可以参考 Eloquent 官方文档,这里不详细展开了。

1.9K10

Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理

Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理 本博文主要介绍 Laravel 框架中 Eloquent 对一对多关系处理以及在 Laravel Administrator...> 定义之相应逆向关系 Model: <?...)课程(SobjectInfo)、学生信息(StuInfo)有主外键关系 * 而且是一对多关系 */ public function StuInfo...> 通过以上步骤处理。之间一对多关系已确立, 以下将介绍在Laravel Administrato 后台中实现 下拉列表查询、绑定等应用 <?...演示样例中多次使用到 “学生姓名”、“课程名”,尽管他们存储在不同中,但因为我们之前在 Model中已建立了它们之间 一对多关系,因此我们能够自由搭配组合 效果图例如以下: 10个Laravel4

2.1K40

一种 Laravel 中简单设置多态关系模型别名方式

作为 Laravel 重度使用者肯定都对多态关系不陌生,以官方文档为例,文章有标签,视频有标签,那么文章和视频这些模型标签模型关系就是多态多对多(Many To Many (Polymorphic...))[1] 如果我们给 ID 为 1 文章打上两个标签,数据库标签关系存储结果就是这样子: > select * from taggables; +--------+-------------+...,而是使用名:posts。...》[2] 我们目标是使用名来做为关系类别名,那么在模型中如何获取名呢,直接使用模型 getTable 即可,那么整个 trait 实现如下: app/Traits/UseTableNameAsMorphClass.php...,或者你模型名不太一致,那么,你只需要修改 trait 中 getMorphClass 实现即可,我个人习惯是模型名就是单数,不带前缀。

2.7K10
领券