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

Laravel Eloquent 模型关联关系详解(上)

比如在大型系统中,我们的用户表通常用于最基本信息的存储,如邮箱、用户名、密码等,然后像用户爱好、标签、个性签名、所在地等信息都存到另一张扩展表中,需要的时候才会去扩展表取数据,从而提高查询性能。...你可能注意到了我们在定义关联关系时,仅仅指定了模型类名,并没有指定通过哪些数据表字段建立关联,这并不是说 Laravel 神通广大,能知过去未来之事,而是因为 Eloquent 对此做了默认的约定。...为什么我们不需要指定 Laravel 就能完成这种关联呢,这是因为如果没有指定 $foreignKey,Eloquent 底层会通过如下方法去拼接: public function getForeignKey...Eloquent 底层约定 可以看到我们在定义多对多关联的时候,也没有指定通过哪些字段进行关联,这同样是遵循 Eloquent 底层默认约定的功劳,belongsToMany 方法签名如下: public...如果你没有遵循上述约定,需要手动指定自己的参数字段,不过还是建议遵循这些默认的约定,不然写着写着容易把自己绕晕。

9.8K40

最为常用的Laravel操作(1)-Eloquent模型

快速入门 更换表名 protected $table = 'my_flights'; 更换主键名称 protected $primaryKey = 'id'; 注意: Eloquent 默认主键字段是自增的整型数据..., 这意味着主键将会被自动转化为 int 类型, 如果你想要使用非自增或非数字类型主键, 必须在对应模型中设置 $incrementing 属性为 false , 如果主键不是整型, 还要设置 $keyType...// role_id : 对应到关联主键 return $this->belongsToMany('App\Role', 'user_roles', 'user_id...Comment(['message' => 'Another comment.']), ]); // 使用 create 创建, 与 save 不同的是, 它j接收一个关联数组, create 方法遵循模型属性的批量赋值操作...例如, 你可能想要使用 Laravel 加密器对存储在数据库中的数据进行加密, 并且在 Eloquent 模型中访问时自动进行解密.

25500
您找到你想要的搜索结果了吗?
是的
没有找到

Laravel学习记录--Model

App\Flight::where('active', 0)->delete();//删除actiove = 0的记录 model 约定 model 默认规则表名去掉s就是其model类名 如果不想遵循这种规则需在...'//指定主键 laravel默认添加数据库时,会 增加两个字段 create_at ,update_at 如不需要这两个字段,除在迁移文件删除之外 还需在model类设置属性 public $timestamps...使用渴求式加载,即根据预先需求查询出所有数据 为了验证[渴求式加载]的好处,举下列例子 这里用到了Laravel Debugbar 调试 安装方法可参照我的另一个博客 - - - Laravel...单看这句话有点云里雾里的 举个例子,在一个场景你系统的用户可以对文章和视频评论,使用多态关联,你只需用一个评论表(comments)即可同时满足存储视频,文章的评论。...,反正体先多态关联)这两种评论结构是一样的,没接触这个之前我们可能会创建两种评论表分别存储文章评论和用户信息的评论,但多态关联解决了这一问题,我们只需键一张评论表,利用这张表存储两种评论。

13.2K20

Laravel源码分析之模型关联

按照Laravel设定好的模式来写关联模型每个人都能写出高效和优雅的代码 (这点我认为适用于所有的Laravel特性)。...我们通过官方文档里的例子来看一下Laravel是怎么定义这两种关联的。 一对多 class Post extends Model { /** * 获得此博客文章的评论。...定义一个多对多关联, 返回一个BelongsToMany关联关系实例 * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany...类的实例,与定义一对多关联时一样,实例化BelongsToMany时定义里与关联相关的配置:中间表名、关联的模型、父模型在中间表中的外键名、关联模型在中间表中的外键名、父模型的主键、关联模型的主键、关联关系名称...模型关联常用的一些功能的底层实现到这里梳理完了,Laravel把我们平常用的join, where in 和子查询都隐藏在了底层实现中并且帮我们把相互关联的数据做好了匹配。

9.5K10

Laravel 模型关联基础教程详解

Laravel 中定义模型关联是每个 Laravel 开发者可能已经做过不止一次的事情。但是在试图实现关联时可能会遇到各种问题。因为 Laravel 有各种各样的关联,你应该选择哪一个?...Laravel 的模型关联可能会让人糊涂。如果你不完全理解 Laravel 的关联在这一点上是如何工作的,别担心,读完这篇文章后,你会更好地理解它。 我们应该使用哪个模型关联?...Database\Eloquent\Model; class Invoice extends Model { public function products() { return $this- belongsToMany...Database\Eloquent\Model; class Product extends Model { public function invoices() { return $this- belongsToMany...: suppliers: - idproducts: - id - supplier_idproduct_history: - id - product_id 即使 product_history 表包含

5.5K31

orm 系列 之 Eloquent演化历程1

Eloquent Eloquent是laravel中的orm,采取的是active record的设计模式,里面的对象不仅包括领域逻辑,还包括了数据库操作,但是大家平时使用的时候可能没有探究eloquent...builder,此时Eloquent的主要的类就如下: 其中Builder负责sql的组装,Connection负责具体的数据库交互,其中多出来一个Grammar,其负责主要是负责将Builder里面存储的数据转化为...其他的关系都类似,此处不再重复,然后eager load的含义是指,当我们要加载多个数据的时候,我们尽可能用一条sql解决,而不是多条sql,具体来说如果我们有多个Users,需要加载Phones的,如果采用...('App\User'); } } 这个关系我们稍微具体讲下,我们在使用上可能会是下面这样子的 return $this->belongsToMany('App\Role', 'user_roles...', 'user_id', 'role_id'); 在构造函数中,会调用addConstraints方法,如下 // class belongsToMany public function addConstraints

1K30

Laravel中使用数据库事务以及捕获事务失败后的异常

Description 在Laravel中要想在数据库事务中运行一组操作,则可以在 DB facade 中使用 transaction 方法。如果在事务的闭包内抛出异常,事务将会被自动还原。...Example 假设有要在数据库中存储一个知识点,这个知识点同时属于两个不同的考点,也就是考点和知识点这两个数据是多对多的关系,那么要实现这种数据结构就需要三个表: 知识点表 wiki: 考点表 tag...: 考点知识点关联表 wiki_tag_rel 现在要开启事务新增Wiki数据,新增wiki成功后再把它关联到指定的考点上去 (在laravel中使用查询构建器或者Eloquent ORM执行query...title'], 'content' => $data['content'] ]); //Wiki和Tag两个Model使用了belongsToMany

1.2K40

Laravel如何使用数据库事务及捕获事务失败后的异常详解

前言 如果大家在Laravel中要想在数据库事务中运行一组操作,则可以在 DB facade 中使用 transaction 方法。如果在事务的闭包内抛出异常,事务将会被自动还原。...示例介绍 假设有要在数据库中存储一个知识点,这个知识点同时属于两个不同的考点,也就是考点和知识点这两个数据是多对多的关系,那么要实现这种数据结构就需要三个表: 知识点表 wiki: ---- id title...---- id name 考点知识点关联表 wiki_tag_rel ---- id tag_id wiki_id 现在要开启事务新增Wiki数据,新增wiki成功后再把它关联到指定的考点上去 (在laravel...newWiki = Wiki::create([ 'title' => $data['title'], 'content' => $data['content'] ]); //Wiki和Tag两个Model使用了belongsToMany

1.6K30

通过 Laravel Eloquent 模型实现简单增删改查操作

「ActiveRecord」是 ORM 的一种实现模式,Eloquent 则是 Laravel 版的「ActiveRecord」。...你可能对「约定优于配置」这个理念不太了解,看几个例子就明白了,比如模型类映射的表名、主键、关联关系、日期格式系统都约定好了,一般而言,遵循这个约定,你就可以不用做任何配置、编写任何额外代码即可完成功能,...当然,如果你不想遵循这个系统约定的规则,也可以通过手动设置模型类属性的方式进行自定义,例如: protected $table = 'articles'; 主键 Eloquent 默认假设每张数据表都有一个整型的自增主键...: public const CREATED_AT = 'create_time'; public const UPDATED_AT = 'update_time'; 此外,默认时间的存储格式是 Y-m-d...本系列教程首发在Laravel学院(laravelacademy.org)

7.9K20

为什么 Laravel 这么优秀?

不过我建议大家在生产环境这样做;生产环境的数据库迁移应该始终保持向前滚动,而不应该含有向后 Rollback 的操作。...// Models/Course.php public function students(): BelongsToMany { return $this->belongsToMany(Student...我们还使用了 Laravel Resource 来格式化最终的输出格式,这样做的原因是很多情况下我们希望直接将数据库的字段暴露出去,你甚至还能在 Laravel Resource 中按不同的角色显示不同的字段...我其实很不明白作为一名工程师为什么我们会瞧上某一门语言?...不过我觉得 Laravel 的不足不在性能,毕竟 PHP 作为脚本语言,就算我们把它优化到极致,也不可能达到类似 Go 那么高的吞吐率,如果真的是为了性能,那为什么选择其他更适合的语言呢?

14310

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

Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理 本博文主要介绍 Laravel 框架中 Eloquent 对一对多关系的处理以及在 Laravel Administrator...Laravel 提供了四种类型的关系: –一对一 –一对多 –多对多 – 多态关系 一对多 一个一对多关系的样例是一篇博客文章有很多评论或者一个课程有的多次分数信息等。...php /** * scoreinfo:分数信息表 Model * so_id :主键自增 * s_id :学生信息表(stuinfo)主键 * soc_id :课程信息表(sobjectinfo...表与表之间的一对多关系已确立, 以下将介绍在Laravel Administrato 后台中的实现 下拉列表查询、绑定等应用 <?...演示样例中多次使用到 “学生姓名”、“课程名”,尽管他们存储在不同的表中,但因为我们之前在 Model中已建立了它们之间的 一对多关系,因此我们能够自由搭配组合 效果图例如以下: 10个Laravel4

2.1K40

Laravel迁移数据库!

我们本期要使用laravel自带的迁移功能,在操作任何数据库的条件下,完成基础的数据构建。 迁移文件 本文假设你已经正确地配置了环境变量文件,并且通过数据库配置项,系统已经可以正常连接到数据库了。...比如主键默认的自增 id,还有用于记录创建时间 created_at 和 更新时间 updated_at,一个 timestamps() 方法就包含了, 只不过默认使用的是直观的整型时间戳,如果要使用...,联合主键约束,唯一性约束,和索引约束。...('amount'); // 索引 $table->index('amount', 'optional_custom_index_name'); // 指定索引名 过于复杂的数据库方面的约束,触发器,存储过程...写在最后 本文介绍了laravel中使用迁移功能操作数据库的创建,修改,移除字段,删除表等,把开发者从手动维护数据库的状态中解脱出来。这样也为团队协作时的有章可循做了铺垫。

94510
领券