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

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

经过一番调研之后发现了一个堪称神器的扩展:laravel-upsert 这个 Laravel 扩展为查询构建Eloquent 添加了对 INSERT & UPDATE (UPSERT) 和 INSERT...这可以是单个记录多个记录。 第二个参数是唯一标识记录的列。除 SQL Server 外的所有数据库都要求这些列具有PRIMARYUNIQUE索引。 提供要更新的列作为第三个参数(可选)。...您还可以忽略重复键错误的同时插入记录: Schema :: create ( 'users' , function ( Blueprint $ table ) { $ table ->...你可以 Eloquent 模型中使用 UPSERT 和 INSERT IGNORE 查询。...Lumen 如果您使用 Lumen,则必须手动实例化查询构建: $builder = new \Staudenmeir\LaravelUpsert\Query\Builder(app('db')->connection

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

Laravel Eloquent 模型关联关系(下)

,如果返回的文章结果是列表的话,需要遍历获取作者信息,假设要循环 N 次的话,加上文章模型本身的获取,总共需要进行 N + 1 次查询 PHP 对数据库的连接是短连接,每次都要重新连接数据库,所以从性能角度考虑不建议使用这种方式...另外,如果访问的是模型实例上的 author() 方法时,返回的不是用户实例了,而是一个关联关系实例,该实例注入了查询构建,所以你可以在其基础上通过方法链的方式构建查询构建进行更加复杂的查询,我们以一个一对多的查询为例...: 如果你想进一步过滤出文章标题和评论都包含「Laravel学院」的用户,可以在上述闭包函数中通过查询构建进一步指定: $users = User::whereHas('posts', function...学院%') ->orderBy('created_at', 'desc'); }]); 关联插入更新 一对多关联记录插入 新增关联模型的时候,可以父模型上调用相应方法直接插入记录到数据库...多对多关联的绑定与解除 插入多对多关联记录的时候,可以通过上面一对多关联记录插入的方式。

19.5K30

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

实际上,Eloquent 模型类底层的查询也是基于查询构建来实现的,你可以模型类上调用所有查询构建的 Where 查询方法,同样是以流接口的模式构建方法链调用即可。...获取单条记录 当然,你也可以通过查询构建的方式模型类查询中获取单条记录: $user = User::where('name', '学院君')->first(); 返回的结果是一个模型类实例: ?...两者的区别是 firstOrCreate 方法设置完模型属性后会将该模型记录保存到数据库中, firstOrNew 不会: $post_1 = Post::firstOrCreate([ '...,这可以借助查询构建来实现: Post::where('views', '>', 0)->update(['views' => 100]); 删除数据 通过模型类删除对应数据表记录更新记录类似,都要先获取对应操作模型实例...,你还可以通过 Eloquent 提供的 destroy 方法一次删除多条记录,通过数组传递多个主键 ID 即可: Post::destroy([1,2,3]); 当然,你也可以通过查询构建的方式删除指定记录

7.9K20

Laravel 5.2 文档 数据库 —— 起步介绍

1、简介 Laravel 让连接多种数据库以及对数据库进行查询变得非常简单,不论使用原生 SQL、还是查询构建,还是 Eloquent ORM。...读/写连接 有时候你希望使用一个数据库连接做查询,另一个数据库连接做插入更新和删除,Laravel 使得这件事情轻而易举,不管你用的是原生 SQL,还是查询构建,还是 Eloquent ORM,合适的连接总是会被使用..., [1, 'Dayle']); 运行更新语句 update方法用于更新数据库中已存在的记录,该方法返回受更新语句影响的行数: $affected = DB::update('update users...如果你想要获取应用中每次 SQL 语句的执行,可以使用listen方法,该方法对查询日志和调试非常有用,你可以服务提供者中注册查询监听: <?...注意:使用DB门面的事务方法还可以用于控制查询构建Eloquent ORM 的事务。

3.2K71

通过 Laravel 查询构建实现简单的增删改查操作

DB 门面提供的方法执行原生的 SQL 语句,DB 门面既可以用于构建查询构建方法链,也可以用于原生语句的执行。...使用查询构建进行增删改查 接下来,我们开始介绍 Laravel 数据库功能的核心组件 —— 查询构建(说是核心,是因为 Eloquent 模型的底层也是基于这个查询构建),日常开发中,我们与数据库的交互基本都是直接间接通过它来完成的...如果要指定查询条件,可以通过 where 实现: $name = '学院君'; $users = DB::table('users')->where('name', $name)->get(); 使用查询构建进行查询...,无需手动设置参数绑定来规避 SQL 注入攻击,因为 Laravel 底层会帮助我们自动实现参数绑定,所以推荐使用查询构建进行数据库操作。...更新记录 更新数据库记录通过 update 方法来完成,我们可以该方法中传入待修改字段及对应修改值数组: $id = 11; $affectedRows = DB::table('users')->where

4.1K20

Laravel学习记录--Model

详情访问laravel查询构造 $model->where()->first()//单行查询 ->find(1)//根据主键查询 ->get(...&更新关联模型 Eloquent提供了便捷的方法将新的模型增加至关联中,如你需要为一个Muser模型插入一个新的Phone,这时你无须为Phone手动设置musers属性,直接在关联上使用save方法插入...调用save方法向Phone模型插入值 这里Eloquent自动phones表中添加了uid字段,并插入正确的值 使用saveMany添加多个值 $user = \App\Muser::find...create方法添加值 create方法和save方法一样也是向模型插入值,不同的是save接收的是一个完整的Eloquent实例,creare接收的是一个纯数组,需要注意的是使用create方法需要设置...,并且没有放在数组里的id会被移除,如果是这样的话那1号学生选修的课程1将被移除,同时会向中间表添加课程id=9的记录 接下来看他的执行过程是否与我们想的一样 通过Laravel Debugbar

13.4K20

详解laravel中blade模板带条件分页

Laravel 的分页查询构建Eloquent ORM 集成在一起,并开箱提供方便的、易于使用的、基于数据库结果集的分页。分页生成的 HTML 兼容 Bootstrap CSS 框架。...基本使用 基于查询构建进行分页 有多种方式实现分页功能,最简单的方式就是使用查询构建 Eloquent 查询提供的 paginate 方法。...默认情况下,当前页通过 HTTP 请求查询字符串参数 page 的值判断。当然,该值由 Laravel 自动检测,然后自动插入分页生成的链接中。...groupBy 的分页操作不能被 Laravel 有效执行,如果你需要在分页结果中使用 groupBy,推荐你手动查询数据库然后创建分页。...这些对象提供相关方法描述这些结果集,除了这些辅助函数外,分页实例本身就是迭代可以像数组一样对其进行循环调用。

7.2K30

Laravel基础

(返回bool 插入是否成功) $result = DB::insert('insert into student(name,age) values(?..., ['abcd']); laraevl内置函数dd,可人性化的打印数组:dd($result); 3.2 数据库操作 - 查询构造 3.2.1 查询构造简介 Laravel 查询构造(query...age', 3); //字段自减3写,默认为1法 返回影响的行数 DB::table('as_admin')->where('id', 12)->decrement('age', 3); //自增自减的同时更新...DB::table("表名")->select("id","name")->get(); 结果分块:如果你需要操作数千条数据库记录可以考虑使用 chunk 方法。...区别: yield是不可扩展的(因为他只声明定义了一个视图片段没有任何内容) section既定义了视图片段,也可以有内容,还可以被子模版扩展 view中,模板继承: 用@extends('模板名

7.7K30

laravel框架数据库操作、查询构建Eloquent ORM操作实例分析

本文实例讲述了laravel框架数据库操作、查询构建Eloquent ORM操作。...而且通过PDO绑定的方式避免SQL注入攻击,使用查询构建时不必考虑过滤用户输入。...Laravel内置的Eloquent ORM提供了一种便捷的方式帮助你组织数据库数据,每张数据表都对应一个与该表进行交互的模型(Model),通过Model类,你可以对数据表进行查询插入更新、删除等操作...Eloquent ORM本质上是查询构建,因此上面查询构建使用的方法Eloquent可以使用。...$row=Student::find(1002); dd($table); 当然也可以通过构建的get()、first()来获取数据 通过上面的增删改查可以看出Eloquent可以使用查询构建的所有方法

13.3K51

跟我一起学Laravel-EloquentORM基础部分

使用Eloquent [‘eləkwənt] 时,数据库查询构造的方法对模型类也是也用的,使用上只是省略了DB::table('表名')部分。...) ->take(10) ->get(); 可以看到,查询构造的方法对模型类也是可以使用eloquent ORM中,get和all方法查询出多个结果集,它们的返回值是一个Illuminate...firstOrCreate方法用来使用给定的列值对查询记录,如果查不到则插入新的。...$flight = App\Flight::firstOrNew(['name' => 'Flight 10']); 更新 基本更新操作 方法save不仅可以要用来插入新的数据,也可以用来更新数据,只需先使用模型方法查询出要更新的数据...,返回删除的行数 $deletedRows = App\Flight::where('active', 0)->delete(); 软删除 软删除是表中增加deleted_at字段,当删除记录的时候不会真实删除记录

81920

Laravel 6.11 版本发布,优化了 Redis 多频道广播逻辑

Laravel 官方开发组本周发布了 Laravel 6.11.0 版本,新版本 Eloquent 模型查询时新增 firstWhere 方法,优化了基于 Redis 的多频道广播,以及一些现有版本的问题修复...'); 需要注意的是这个方法仅仅在 Eloquent 模型查询中可用,在数据库查询构建中不可用。...优化 Redis 多频道广播 Laravel 应用中,一次发送事件到多个频道很常见,目前,我们的做法是通过多个发布命令发送完全一样的负载数据到指定 Redis 服务,这将导致不必要的数据传输,从而带来通信及性能损耗...所以,最新版本的 Laravel 优化了这个问题, RedisBroadcaster 中添加一段 Lua 脚本,允许一次广播数据到多个频道: 2、更新日志 接下来,我们来大致看一下此次版本更新的详细日志...:makeFaker() 中的未定义属性 修复 Str::afterLast() 方法 修复 PHP 7.3 插入浮点类型到 MySQL 数据库问题 修复通过自定义中间表属性名刷新模型问题 代码调整

1.4K10

Laravel 数据库连接配置和读写分离

默认情况下,我们通过 Laravel 提供的数据库工具(DB 门面、查询构建Eloquent模型)连接数据库的时候,都没有显式指定连接,因为我们配置文件中指定了默认的连接 mysql。...')->select(...); DB::connection('mysql_old')->insert(...); 如果你使用的是查询构建进行数据库操作,可以这么指定(和原生操作一样): $users...针对读写分离数据库的连接,Laravel 数据库底层会自动判断,如果是查询语句会使用读连接,如果是数据库插入更新、删除等操作会使用写连接。...然后我们通过 Tinker 插入一条记录插入属于写操作,自动使用写连接): 然后你会在写数据库中看到这条记录,读数据库中没有,接下来,我们运行一条查询语句(查询属于读操作,自动使用读连接): 此时,由于我们并没有配置读写数据库之间的数据同步...当然,和多个数据库连接类似,你也可以使用时显式进行指定,以查询构建为例: DB::connection('read')->table('users')->where(...)

5.2K20

Laravel系列4.3】模型Eloquent ORM的使用(一)

注意看代码中注释的部分,我们用 MTest::insertGetId() 这种形式也是可以插入成功的,只是这种形式是更类似于 查询构造 的方式了,不太能体现出 ORM 的感觉,所以还是使用实例化对象的方式来操作...注意,这里也可以使用 save() 方法的,它的作用是即可以用于新增也可以用于保存, 查询构造 中没有这个方法,但是有一个类似的 updateOrInsert() 方法,大家可以自己试试。...最后查询中,我们也看到了类似于 查询构造 的链式调用形式,通过模型的静态 where() 方法返回的实例对象,一步步地构造整个查询。...这个原理我相信已经不用我多解释了,和 查询构造 的不同就是这里是通过 Model 起步开始构造的,不是直接通过 DatabaseManager 起步的。...它判断的是这个 key 是否是抽象基类 laravel/framework/src/Illuminate/Database/Eloquent/Model.php ,不是我们定义的 MTest ,用的是一个

8.8K20

laravel Model 执行事务的实现

使用DB门面的事务方法还可以用于控制查询构建Eloquent ORM 的事务。...; } } } 注意事务回滚之后会有自增id 不会连续 比如 3,4,5, 5回滚之后 再次插入数据会变成 3,4,6 会跳过 为什么呢?...如果你认为自增ID不应该被事务化,那么其他事务不得不等待着,检查自增ID是被使用还是被回滚,这就导致阻塞 因为innodb的auto_increament的计数记录的当前值是保存在存内 存中的,并不是存在于磁盘上...,当mysql server处于运行的时候,这个计数值只会随着insert改增长,不会随着delete减少。...所以就算 Rollback MySQL的auto_increament计数不会作负运算 解决办法:可以使用count() 等计数 方式 插入id (比较麻烦) 以上这篇laravel Model 执行事务的实现就是小编分享给大家的全部内容了

1.4K31

通过 Laravel Eloquent 模型实现批量赋值和软删除

作为一个成熟的 ORM 框架,Eloquent 设计之初肯定不会没有考虑到这样的问题,实际上,我们可以借助模型类中的白名单属性黑名单属性来解决这个困扰。...更新模型 如果是更新模型类,也可以通过批量赋值的方式实现,只需获取模型类后使用 fill 方法批量填充属性即可: $post = Post::findOrFail(11); $post->fill($...虽然表单中设置了 user_id,但是并没有应用批量赋值。 软删除 我们日常开发过程中,删除数据库记录在所难免,但是我们多数时候并不想从数据库中物理删除记录只是想从业务角度逻辑删除。...实现原理 Eloquent 模型类为我们提供了「软删除」功能的支持。这就意味着, Laravel 中,我们不需要编写任何额外代码就可以实现对数据库记录的「软删除」。...如果想要在查询结果中出现软删除记录可以通过查询的时候调用 withTrashed 方法实现: $post = Post::withTrashed()->find(32); 返回结果和正常查询结果一样

2.3K10

Laravel框架关键技术解析

) C.PHP中的特殊语法 1.魔术方法:通常用户不会主动调用,而是特定的时机被PHP系统自动调用,可以理解为系统事件监听方法,事件发生时才触发执行。...,实例化对象时,static会根据运行时调用的类来决定实例化对象,self是根据所在位置的类来决定实例化对象 4.Laravel示例:Illuminate\Database\Eloquent\Model.php...//创建,第一次要composer down-autoload一下 php artisan db:seed [—class=类名] B.查询构造 1.Laravel框架的查询构造PDO扩展基础上设计的一个...\Database\Query\Grammars SQL语句执行阶段,Illuminate\Database\Connection C.Eloquent ORM 1.两个阶段 Eloquent ORM查询构造的生成...十二、会话 A.Laravel框架中的session机制 1.当客户端访问服务时,服务将开启session,检测请求的Cookie中是否携带sessionID,如果携带则使用该sessionID,

11.9K20

laravel insert 、save、update、create区别(总结二)

调用 save 方法,一条记录就会插入数据库。created_at 和 updated_at 时间戳随着 save 方法的调用,会自动维护,无需手动操作。 save 方法也可用于模型更新。...同样地,updated_at 时间戳自动更新,无需手动操作: 3.update:更新操作,自动维护 updated_at字段 也可一并更新查询到的多个模型。...自动维护 created_at 和 updated_at两个字段 除了 save 和 saveMany 方法外,你还可以使用 create 方法。...还有, save 方法和 create 方法的不同之处在于, save 方法接受一个完整的 Eloquent 模型实例, create 则接受普通的 PHP 数组: $post = App\Post:...', ]); {tip} 使用 create 方法前,请务必确保查看过本文档的 批量赋值 章节。

1.2K10
领券