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

Laravel Eloquent 模型关联关系(下)

今天我们将在定义好模型关联的基础上进行关联查询、插入和更新操作,看看如何借助模型关联提高代码的可读性并提高编码效率。...性能上来说,渴求式加载更优,因为它会提前数据库一次性查询所有关联数据,而懒惰式加载在每次查询动态属性的时候才会去执行查询,会多次连接数据库,性能上差一些(数据库操作主要开销在数据库连接上,所以在开发过程中如果想优化性能...这样,我们就不需要在每个地方去判断如果文章作者信息为空该如何处理了,因为这种情况下返回的也是一个正常的 User 模型实例。...Eloquent 提供了这种同步机制帮助我们更新子模型时触发父模型的更新时间 updated_at 字段值更新,要让该机制生效,需要在子模型中配置 $touches 属性: // 要触发更新的父级关联关系...学院致力于提供优质Laravel中文学习资源'; $comment->save(); 再次查看评论模型及对应文章模型数据,可以看到文章模型的更新事件和评论模型的更新时间已经一致了: 结语 好了,关于关联关系我们就介绍到这里

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

Laravel 参数验证的疑与惑

1 通过extend方法扩展 //这是一个简单的参数比较的验证规则,Laravel5.8中提供,Laravel5.5中未提供 //验证规则如下: 'max_num'=>'gte:min', Validator...2 通过自定义规则类扩展 Laravel 中提供了Illuminate\Contracts\Validation\Rule接口,只有实现了这个接口的类都认为是符合的自定义验证规则类。 <?...从而导致在当前扩展的验证规则中,只能过获取到需要验证的数据,而获取不到其他的字段数据,无法进行联合字段的验证。像上面比较两个字段的大小的验证规则就无法实现。...例如,一个验证规则如下,表示用当期类的validateMinNum对参数进行验证,那么,这样的一个功能,如何Laravel中实现呢。...可以获取到验证器本身,因此可以做多个字段关系的验证;另一种是通过自定义规则类实现。自定义规则了只对使用自定义规则类的验证有效。但是自定义规则类本身无法直接获取到验证器本身,不能够做多个字段关系的验证。

3.3K00

关于Laravel参数验证的一些疑与惑

1 通过extend方法扩展 //这是一个简单的参数比较的验证规则,Laravel5.8中提供,Laravel5.5中未提供 //验证规则如下: 'max_num'= 'gte:min', Validator...2 通过自定义规则类扩展 Laravel 中提供了Illuminate\Contracts\Validation\Rule接口,只有实现了这个接口的类都认为是符合的自定义验证规则类。 <?...从而导致在当前扩展的验证规则中,只能过获取到需要验证的数据,而获取不到其他的字段数据,无法进行联合字段的验证。像上面比较两个字段的大小的验证规则就无法实现。...例如,一个验证规则如下,表示用当期类的validateMinNum对参数进行验证,那么,这样的一个功能,如何Laravel中实现呢。...可以获取到验证器本身,因此可以做多个字段关系的验证;另一种是通过自定义规则类实现。自定义规则了只对使用自定义规则类的验证有效。但是自定义规则类本身无法直接获取到验证器本身,不能够做多个字段关系的验证。

6.6K31

3分钟短文 | Laravel 自定义 SQL 查询参数绑定

引言 laravel使用模型进行数据库操作时,并不是所有的字段或者关联关系 都能满足查询需求,有时候会有一些MySQL的函数计算等功能放在数据库 层面执行。 本文说一说自定义的参数绑定办法。...那么如果写到程序里,应该如何把绑定参数按顺序传入呢。 既然是自定义的字段名,我们可以使用 DB::raw 方式传入。...如果大家经常使用laravel的调试功能的话,应该会注意到,这种问号的写法是laravel本身封装SQL语句用的。...))*sin(radians(lat)))) AS distance SQL; 首先拼装好SQL语句的字段,然后使用laravel模型的方法: $property = Property::selectRaw...模型进行复杂的自定义查询, 其中提供了两种参数绑定的方式,我们推荐使用 selectRaw 的方式, 更为直观。

2K40

Laravel学习记录--Model

Laravel 自带的 软删除功能 就利用全局作用域数据库中提取「未删除」的模型。编写自定义的全局作用域可以提供一个方便、简单的方法来确保给定模型的每个查询都受到一定的约束。...嵌套的渴求式加载 渴求式加载指定字段 带条件约束渴求式加载 懒惰式渴求式加载 当以属性方式访问Eloquent关联关系的时候,关联关系数据是[懒惰式加载]因为都是用到的时候才执行查询,这就意味着要多次对数据库进行查询才能返回需要的结果...这样的查询次数显然不符合数据库查询优化 使用渴求式加载解决 Eloquent中提供了with方法,只需将建立Model关系的方法传入with即可 修改上述代码优化查询 public function...渴求式加载多个关联关系 有时候你需要在单个操作中渴求式加载多个不同的关联关系,要实现这一功能,只需添加参数到with方法即可 ,以逗号分割 如,查询文章的作者即所在栏目 嵌套的渴求式加载 要使用嵌套的渴求式加载的关联关系...,而是“远程”关联,问题是如何远程关联?

13.4K20

为什么 Laravel 这么优秀?

虽说 Laravel 5.x 后 Laravel 的版本变化比较快,基本一年一个大版本,但它的核心几乎 4.X 以来没有发生过特别大的变化。...Course -a –api –pest definition database fields of courses table & definition model relation 定义课程表的数据库字段和定义模型关系...因为我们已经完成了数据表中字段的定义、表与表的关系、以及最重要的一步:如何将数据及数据之间的关系写入数据库中,下面简单的来介绍下在 Laravel如何完成的。...我们还使用了 Laravel Resource 来格式化最终的输出格式,这样做的原因是很多情况下我们不希望直接将数据库的字段暴露出去,你甚至还能在 Laravel Resource 中按不同的角色显示不同的字段...从容器里东西(get) 所有用到容器的框架其本质都是在框架启动的时候疯狂的往容器里装东西,容器里面的东西越多,容器提供的功能越大。

16010

通过 Request 对象实例获取用户请求数据

而作为最流行的 PHP 框架,Laravel 自然也是为处理用户请求提供了丰富的工具集,收集、验证、到过滤、编排,可谓是一应俱全,接下来,我们将通过三四篇教程的篇幅来为你详细介绍如何Laravel...,我们还可以通过 input 方法值,该方法可以所有请求方式中获取给定字段的值,所以更加通用: $id = $request->input('id'); $name = $request->input...('name'); 我们还可以为 input 方法传递第二个参数作为默认值,如果请求字段为空的话,则使用该默认值: $site = $request->input('site', 'Laravel学院...获取 JSON 输入字段值 随着基于 JavaScript 的单页面应用(SPA)应用的流行,除了传统表单请求提交的 POST/GET 数据之外,JSON 格式的请求数据也越来越常见,Laravel 支持对...作为定义路由的匿名函数参数之间已经见过很多了,这里我们来演示下作为控制器方法参数传入,以及如何通过 Request 对象实例获取。

19.7K30

3分钟短文:Laravel 模型查询数据库的几个关键方法

引言 本期继续我们的laravel学习,主要说一说laravel使用eloquent orm 模型 读取数据库条目的几个常用方法。 ?...学习时间 让我们最简单的例子开始,就是获取数据库表内所有的条目,返回一个集合。...使用下面的方法即可实现: $allContacts = Contact::all(); 通过查看源码我们知道all方法,其实是调用了 get 方法并默认返回所有字段。...顺带再说一下聚合函数,使用关系型数据库很大的因素就是其拉关系型数据很高效, 因此也内置了很多聚合函数用于数据聚合操作。...写在最后 本文主要讲了数据库查询相关的内容,包括获取全量数据,获取单条数据, 分块拉数据,以及聚合函数等,这些常规操作集合上期讲的查询约束项, 基本上可以涵盖编程中的大多数需求了。

2.1K40

基于 PHPStorm 编辑器的 Laravel 开发

引言 本文主要讲述在PHPStorm编辑器中如何使用PHPStorm的Laravel插件和Laravel IDE Helper来开发Laravel程序,结合个人积累的一点经验来说明使用PHPStorm编辑器来开发程序还是很顺手的...,然后点击 getcomposer.org网上下载,PHPStorm会自动下载 composer.phar文件,并在项目根目录下生成 composer.json文件,速度也很快: ? ?...对于 composer.json文件中数组key字段值可以在Composer官网上查找相关解释,包括重要的 require和 require-dev字段解释。...当然也可直接在composer.json里添加上require字段值及对应的laravel-ide-helper值,再 php composer.phar composer.json update就行,...5、使用PHPStorm的Database链接Laravel程序数据库 PHPStorm中提供了database插件,功能也比较强大,我想用过PHPStorm的应该都知道如何使用,这里聊下一个很好用的一个功能

3.6K80

laravel 学习之路 路由与控制器

前面学习的路由与控制器,接下来学习如何把路由与控制器关联起来 配置路由关联控制器 Route 的 get 或者 post 方法,第一个参数就是我们要定义的路由,就是我们在地址栏请求的那段url,...嵌套的组尝试智能地「合并」其属性及其父组。中间件和 where 条件语句在附加名称、命名空间和前缀时被合并。...会发现命令行创建的控制器里面有个 edit 方法,edit 方法有个 $id 参数,通过名字我们很容易就明白这是用来修改数据的,id 一般又是数据库的自增字段,但是这个 id 是哪传来的呢?...你会发现 id 和 name 没对上,这边画个重点 路由参数中的第一个参数对应控制器中的第一个路由参数以此类推在控制器中路由参数跟参数名是没关系的只跟顺序有关。...我上面示例中还用了个 request() 函数它跟 Request $request 效果是一样的,$request 可以方便复用,所以在控制器中更推荐使用$request,如果传的请求参数比较多的时候这样一个一个贼麻烦

98310

Laravel 6.10 版本发布,支持 PHPUnit 9,为 PHP 8 留下后手

Laravel 开发团队昨天发布了 v6.10 版本,本次版本发布包含 11 个新特性以及大量的问题修复、功能废弃和代码优化,另外,还引入了对 PHPUnit 9 的支持。...支持 PHPUnit 9 v6.10 开始,Laravel 开始支持 PHPUnit 9,可以通过完整的 pull request 查看实现细节:https://github.com/laravel...构建器中新增 mixin 支持 Redis Connection 支持定义宏方法 新增 PackageManifest::config() 方法 在容器中新增 redis.connection 别名 ...方法可以公开访问 删除对 graham-campbell/testbench-core 扩展包的依赖 从容器中解析 Faker\Generator 问题修复 修复 Blueprint 中 float 数据库字段类型...修复依赖 getenv() 的代码 防止在重连时进行实际的 PDO 连接 修复针对嵌套数据的 exclude_if/exclude_unless 验证规则 将 dev-master 分支别名 6.0

2.5K30

深入理解Laravel定时任务调度机制

例如爬虫系统需要定期去爬一些网站数据,自动还贷系统需要每个月定时对用户账户扣款结算,会员系统需要定期检测用户剩余会员天数以便及时通知续费等等。...不过本文并不会过多讨论crontab的内容,而是要深入分析一下PHP Laravel框架是如何基于crontab封装出功能更加强大的任务调度(Task Scheduling)模块。...为解决此问题,Laravel中提供了使任务后台执行的方法runInBackground。...具体到laravel定时任务,那就是给任务加锁,只有拿到任务锁之后,才能够执行任务的具体内容。 Laravel中提供了withoutOverlapping方法来让定时任务避免重复。...如何实现30秒任务? 我们知道crontab任务最精细的粒度只能到分钟级别。那么如果我想实现30s执行一次的任务,需要如何实现?

10.4K162

Laravel5.2之模型关联预加载

并且关系是: [ 'merchants_phones' => 'one-to-one', 'merchants_shops' => 'one-to-many', 'shops_products...开发环境:Laravel5.1+MAMP+PHP7+MySQL5.5 先写个店铺列表页 1.先装上开发插件三件套(具体可参考:Laravel5.2之Seeder填充数据小技巧) 不管咋样,先装上开发插件三件套...: composer require barryvdh/laravel-debugbar --dev composer require barryvdh/laravel-ide-helper --dev...$shop->merchant->last_name}} {{--这里数组电话号码--}} <strong style...预加载查询 (1)嵌套预加载 Eloquent在通过属性访问关联数据时是延迟加载的,就是只有该关联数据只有在通过属性访问它时才会被加载。在查找上层模型时可以通过预加载关联数据,避免N+1问题。

2.5K41

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

思考:如何提高Model层查询DB的效率?如何精简代码?...经过一番调研之后发现了一个堪称神器的扩展:laravel-upsert 这个 Laravel 扩展为查询构建器和 Eloquent 添加了对 INSERT & UPDATE (UPSERT) 和 INSERT...IGNORE 的支持 先简单说明一下业务场景: 首先表结构设计是:互相喜欢和添加联系人都是双向关系,即入库A B,B A这样成对的双向数据 触发互相喜欢,插入2条双向数据,插入之前校验是否存在,存在不重复添加...如果互相喜欢,则添加双向联系人关系,插入之前校验是否存在,存在则更新type等字段,不存在则插入双向数据 我们通过这个场景能非常好的体会laravel-upsert的强大,不仅减少了代码量,也减少了sql...默认的时间格式,并且我们的插入时间和更新时间也不是laravel默认的字段,我们需要做如下定义: //时间戳类型 public $timestamps = true; //重写插入和修改时间的字段

5.7K20
领券