说明:本文主要说明Laravel Eloquent的延迟预加载(Eager Loading),使用延迟预加载来减少MySQL查询次数。同时,会将开发过程中的一些截图和代码黏上去,提高阅读效率。...开发环境:Laravel5.1+MAMP+PHP7+MySQL5.5 先写个店铺列表页 1.先装上开发插件三件套(具体可参考:Laravel5.2之Seeder填充数据小技巧) 不管咋样,先装上开发插件三件套...\Carbon $created_at * @property \Carbon\Carbon $updated_at * @property-read \Illuminate\Database\Eloquent...generate php artisan ide-helper:models php artisan test-factory-helper:generate 表的关系如图: 然后写Seeder,可以参考Laravel5.2...而且,使用预加载超级简单。
($query) { return $query->where('active', 1); } // 使用本地作用域 $users = App\User::popular()->active()...scopeOfType($query, $type) { return $query->where('type', $type); } // 使用动态作用域 $users = App\User...例如, 你可能想要使用 Laravel 加密器对存储在数据库中的数据进行加密, 并且在 Eloquent 模型中访问时自动进行解密....除了自定义访问器和修改器, Eloquent 还可以自动转换日期字段为 Carbon 实例甚至 将文本转换为 JSON ....(); 模型日期格式 默认情况下, 时间戳的格式是 Y-m-d H:i:s , 可以结合 $dateFormat 属性自定义格式: class Flight extends Model { /*
引言 laravel引用了强大的Carbon日期时间处理库用于日期时间的操作, 并且在数据库的格式化中使用该库。本文就说一说程序中如何方便地使用 Carbon自定义格式。...']); 获取到Carbon对象之后,使用格式化函数进行字符串格式化操作。...比如说有比较特殊的地区日期格式,就可以使用标准字符串定义: $suborder['payment_date'] = $createdAt->format('M d Y'); 随着laravel的版本更新升级...接着使用Carbon对象的 format 方法,返回自定义的格式就可以了。...在模板中打印默认格式的日期时间字符串,可以这样使用: {{$user->created_at->toFormattedDateString()}} 写在最后 本文介绍了laravel模型中的 $casts
说明:本文主要聊一聊Laravel测试数据填充器Seeder的小技巧,同时介绍下Laravel开发插件三件套,这三个插件挺好用哦。同时,会将开发过程中的一些截图和代码黏上去,提高阅读效率。...开发环境:Laravel5.2 + MAMP + PHP7 + MySQL5.5 开发插件三件套 在先聊测试数据填充器seeder之前,先装上开发插件三件套,开发神器。先不管这能干些啥,装上再说。...1、barryvdh/laravel-debugbar composer require barryvdh/laravel-debugbar --dev 2、barryvdh/laravel-ide-helper...\Illuminate\Database\Eloquent\Collection|\App\Tag[] $tags * @method static \Illuminate\Database\Query...Laravel官方推荐使用模型工厂自动生成测试数据,推荐这么写的: //先输入指令生成database/seeds/CategoryTableSeeder.php文件: php artisan make
下面是翻译自 Laravel-News 的一篇教程,总结了 Laravel 的对象关系映射框架(ORM)的几个小技巧。...类型的,可以方便的使用 Carbon 提供的时间方法 protected $appends = ['field1', 'field2']; // 序列化时候附加的额外属性,通过模型中定义 getXXXAttribute...此外,Eloquent中还有一些与日期/时间相关的预定义方法: User::whereDate('created_at', date('Y-m-d')); User::whereDay('created_at...') { $query->orderBy('created_at', request('ordering_rule', 'desc')); } 但是一个更好的方法是——使用 when()方法 $...withDefault([ 'name' => 'Guest Author' ]); } 太长了,下一篇再续上 http://blog.kbiao.me/2019/01/05/20-Laravel-Eloquent-Tips-and-Tricks
此外还提供在 Laravel 框架内使用的数据库抽象层 DB 类。 非但如此,database 组件提供了能在非 Laravel 框架以外的项目使用接口 Capsule 类。...database ORM 组件 |---- support Laravel 辅助组件 |---- nesbot Carbon...日期处理组件 |---- paragonine 随机字符生成组件 |---- symfony |---- composer.json composer 包管理配置文件 本系列重点解析...核心 2.1 文件结构 |---- database |---- Capsule 文件夹提供非 Laravel 框架以外的系统使用 Laravel...ORM 处理过程中的事件接口定义 |---- Migrations 定义数据库迁移命令行工具对应的数据迁移实现类 |---- Query
: 'Y-m-d H:i:s'); } 其实Laravel 7.0升级说明中说了此问题:升级说明《Laravel 7 中文文档》(没有仔细看升级说明文档); 描述如下: 受影响可能性:高 在 Eloquent...模型上使用 toArray 或 toJson 方法时,Laravel 7 将使用新的日期序列化格式。...为了格式化日期以进行序列化,Laravel 将会使用 Carbon 的 toJSON 方法,该方法将生成与 ISO-8601 兼容的日期,包括时区信息及小数秒。...此外,该更改提供了更好的支持,并与客户端日期解析库集成。 此前,日期将序列化为以下格式:2020-03-04 16:11:00 。...使用新格式进行序列化的日期将显示为:2020-03-04T20:01:00.283041Z 如果你希望继续保持之前所用的格式,你可以重写模型的 serializeDate 方法: /** * 为数组
我们从软删除的使用,再顺便说一说模型内的作用域的概念。 代码时间 常规的删除操作分两步进行,一步是把数据从数据库中查询出来,使用laravel模型的方法, 则返回的是一个模型对象。..., 5, 7]); 当然了,delete方法只是链式调用的一个方法,我们通过查询构造器过滤后的数据集, 都可以调用该方法将其删除: Contact::where('updated_at', '>', Carbon...在laravel中, 这个软删除字段默认是 deleted_at。你也可以在模型中手动指定。...大家注意, 想我们的常规操作一样,就是获取一个时间戳$time, 然后把字段赋值: $this->deleted_at = $time; 最后使用update方法更新模型,并修改数据库条目。...写在最后 本文从laravel模型的写操作删除动作,讲到了软删除的概念。进而引申出来本地作用域和全局作用域的使用。软删除几乎贯穿了我们应用的始终,需要大家勤学苦练。
引言 今天说一个细分的需求,在模型中,或者使用laravel提供的 Eloquent ORM 功能,构造查询语句时,返回位于两个指定的日期之间的条目。应该怎么写? 本文通过几个例子,为大家梳理一下。...学习时间 假设有一个模型 Reservation,我们查询某个日期的预订条目数,首先构造日期字符串,使用内置函数: $now = date('Y-m-d'); 返回当前日期。...to 在laravel中你可以使用 whereBetween 这个查询子句。...当然了,上面的方法是在SQL中直接进行筛选,如果查询结果限制的条目本身比较少,也能充分利用索引,所以不担心查询的速度,那么我们可以在查询完成后,在返回的 Eloquent Collection 集合上,...注意程序写起来很柔顺,使用 Carbon 提供的 between 方法进行判断。程序上下文很好理解。
经过一番调研之后发现了一个堪称神器的扩展:laravel-upsert 这个 Laravel 扩展为查询构建器和 Eloquent 添加了对 INSERT & UPDATE (UPSERT) 和 INSERT...你可以在 Eloquent 模型中使用 UPSERT 和 INSERT IGNORE 查询。...Lumen 如果您使用 Lumen,则必须手动实例化查询构建器: $builder = new \Staudenmeir\LaravelUpsert\Query\Builder(app('db')->connection...LaravelUpsert\Eloquent\HasUpsertQueries; 因为我们数据库的时间是int类型,不是laravel默认的时间格式,并且我们的插入时间和更新时间也不是laravel默认的字段...重写插入和修改时间的字段名 const CREATED_AT = 'createtime'; const UPDATED_AT = 'updatetime'; //设置日期格式为时间戳
物理删除 其实就是真实地把数据从数据库条目清除,laravel模型提供了开箱即用的方法。...真实的SQL如下: DELETE FROM events WHERE id = 12; laravel提供了许多语法糖,上面使用 find 和 delete 两个步骤,可以缩减为一个方法 destroy...namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes;...在类内引入trait,并手动指定修改器,也就是说deleted_at字段,我们使用 Carbon 进行实例化操作。...任何设置deleted_at为日期时间值的记录,都不会包含在任何查询结果中,因此看起来已经被删除了。
老高又开始折腾laravel了 :-D (基于Laravel 5.2) 写在前面 此系列文章主要是记(瞎)录(扯)一些老高在研究 laravel 5.2 时的感悟。...常规教程在这里Laravel 5.2 中文文档,在此要十分感谢Laravel 学院!没有他laravel在国内也不会这么普及(老高)。...:false);" // bool(false) 安装 5.1 - 5.2的变化不是很激进,安装方法没有变化,所以安装其实没什么好说的,具体看这里Laravel 5.2 安装。...数据库 数据库方面laravel实在是太强大了,没错,老高说的就是Eloquent ORM!...Eloquent可以很容易的被剥离出去单独使用。
模型Eloquent ORM的使用(二) 对于模型的探索我们还将继续。上篇文章中,只是简单地通过模型操作了一下数据库,并且学习了一下关联操作的知识。...比如说我们可以使用类似于 array_map() 的函数把集合中的对象全部转换成数组,还可以用一个类似于 array_column() 的函数只获取数据中的两个字段组成键值对形式的数据。...在所有模型都要继承的 laravel/framework/src/Illuminate/Database/Eloquent/Model.php 类中,我们很快就能发现一个 query() 静态方法。...但 Eloquent\Builder 的内部持有的一个query 属性依然是 Query\Builder 对象,也就是说在底层,它依然是调用的我们熟悉的那个 查询构造器 来进行工作的。...参考文档: https://learnku.com/docs/laravel/8.x/eloquent/9406
Laravel 中默认使用的时间处理类就是 Carbon。...2 使用 你需要通过命名空间导入 Carbon 来使用,而不需每次都提供完整的名称。 use Carbon\Carbon; 2.1 获取当前时间 可以同now() 方法获取当前的日期和时间。...: "UTC" } 要想获取字符串类型的日期,可以使用下面的代码 echo Carbon::today()->toDateTimeString(); echo Carbon::yesterday()->...此外还提供了一个modify方法,参数格式为 +或 – 跟上值及单位。...('-2 days'); //2016-10-13 14:00:01 2.6 日期比较 在 Carbon中你可以使用下面的方法来比较日期: min –返回最小日期。
,假设要循环 N 次的话,加上文章模型本身的获取,总共需要进行 N + 1 次查询,而 PHP 对数据库的连接是短连接,每次都要重新连接数据库,所以从性能角度考虑不建议使用这种方式。...= User::whereHas('posts', function ($query) { $query->where('title', 'like', 'Laravel学院%')...$query->where('title', 'like', 'Laravel学院%') ->orWhereExists(function ($query) { $query...) { $query->where('title', 'like', 'Laravel学院%'); })->whereHas('posts.comments', function ($query...希望你看完学院君的这一系列教程可以了解并完全掌握 Eloquent 模型的定义和使用,有什么问题,欢迎随时与我交流。
书籍基于Laravel4的,学习时使用Laravel5.2框架开发。...Eloquent比较好用在于它提供了很多Feature功能模块,这些模块提供了许多面向对象的方法便于使用,这样就不用写SQL语句了,且代码看起来也很舒服。。...不过有时也推荐使用它的Query Builder查询构造器,实际上就是SQL语句封装的类,性能会比较高一些,个人遇到过一个场景:使用Eloquent ORM性能有点慢,导致PHP执行过长报503 Time...Out,改成Query Builder后性能高很多脚本执行很快搞定,当然各有利弊,毕竟Eloquent很强大很好用。...自带的验证规则,'url'也是laravel自带的URL验证规则,就是格式得符合URL格式,'|'表示且的意思。
对于任何一个模型,如果需要使用软删除功能,需要在模型中使用 Illuminate\Database\Eloquent\SoftDeletes这个 trait。...Laravel中软删除数据的过滤也是使用这种方式实现的。...SoftDeletes trait中加入了Illuminate\Database\Eloquent\SoftDeletingScope全局的Scope。...以上就是Laravel实现软删除的大概逻辑。这里有一个细节,Laravel中软删除的标记是一个时间格式的字段,默认delete_at。通过是否为null判断数据是否删除。...但是有的时候,项目中会使用一个整形的字段标记数据是否删除。在这样的场景下,需要对Laravel的软删除进行修改才能够实现。
引言 本期继续我们的laravel学习,主要说一说laravel使用eloquent orm 模型 读取数据库条目的几个常用方法。 ?...因为设计的原因,laravel支持的链式操作 本质上方法的返回值归属于不同的类。所以在使用方法之前务必明确调用的是哪个类的那个方法,返回的是什么类型的数据。...eloquent门面为我们提供了很多好用的链式操作方法, 在query builder筛选出合适的条目后,返回一个eloquent collection,或者是一个 基类的collection对象,可以直接使用集合的方法操作数据集...所以我们推荐使用where语句进行数据库SQL操作,将合适的结果集返回,这样精简了数据库负载, 再者,使用集合的操作方法,对结果集进行进一步的格式化,效率会高的多。...写在最后 本文主要讲了数据库查询相关的内容,包括获取全量数据,获取单条数据, 分块拉取数据,以及聚合函数等,这些常规操作集合上期讲的查询约束项, 基本上可以涵盖编程中的大多数需求了。
日期时间格式化 先从最常用的地方着手,比如在迁移文件内使用的 timestamps方法,就是在表内生成 created_at和updated_at两个 datetime 类型的字段,用于标记该记录的创建时间和更新时间...laravel框架继承了广泛使用稳定可靠的 Carbon 类库用于操作日期时间。...= ['created_at','updated_at','started_at']; 那么这三个字段都会使用 Carbon 进行格式化,在访问模型对象属性时,就会返回该Carbon对象。...访问器 其实上一节所说的日期时间的格式化,正是laravel模型访问器的功能。专门用于在模型层面,修改模型属性的展示方式。定义一个访问器非常简单,就是在模型内添加规范格式的方法函数。...这是laravel提供的语法糖,很好使! 写在最后 本文通过日期时间字段的格式化方法,引申出laravel模型的访问器功能,并通过实例介绍了具体的用法。
Manager,记得网上搜索过关键字Using Eloquent outside Laravel,我们可以看到一篇Vivek Kumar Bansal写的文章,文章从2方面介绍了怎么使用Eloquent...接着我们看第二个Making a Model,使用上非常简单: //User Model use Illuminate\Database\Eloquent\Model as Eloquent class...User extends Eloquent { // } 此处Eloquent已经通过初始化设置了静态变量$resolver,我们可以方便的获取连接Connection了,也就是有了数据库操作的功能...Schema和Query,同时DatabaseManger和Eloquent还处理协作关系,Eloquent负责领域类的打理,最后ConnectionFactory则打点着所有的Connection,提供基础的功能...参考 [ Laravel 5.3 文档 ] Eloquent ORM —— 关联关系