首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    在 Laravel Eloquent 模型类中使用作用域进行查询

    通过全局作用域类实现 要实现「全局作用域」,首先需要编写一个实现 Illuminate\Database\Eloquent\Scope 接口的全局作用域类,这里我们将其命名为 EmailVerifiedAtScope...php namespace App\Scopes; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent...; } 而在文章详情页,我们希望展示的是已发布的文章详情,如果文章没有发布,返回 404,因此我们再定义一个「局部作用域」方法 scopeActive(没有 status 字段的话新增一个): public...`deleted_at` is null limit 1 说明局部作用域已经生效了,通过这个例子你可能不觉得「局部作用域」的优势,我们来看列表页的查询。...,一方面代码可读性很差,另一方面而且容易出错,可维护性不好,每次修改一个地方的参数,其它地方要同步修改,换成局部作用域来实现,既清晰又简洁。

    2.5K20

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

    使用Eloquent [‘eləkwənt] 时,数据库查询构造器的方法对模型类也是也用的,使用上只是省略了DB::table('表名')部分。...$primaryKey成员变量覆盖该字段名称,另外,Eloquent假设主键字段是自增的整数,如果你想用非自增的主键或者非数字的主键的话,必须指定模型中的public属性$incrementing为false...); 可以看到,查询构造器的方法对模型类也是可以使用的 在eloquent ORM中,get和all方法查询出多个结果集,它们的返回值是一个Illuminate\Database\Eloquent\Collection...参数 类型 说明 perPage int 每页显示数量 columns array 查询的列名 pageName string 页码参数名称 page int 当前页码 返回值为 LengthAwarePaginator...php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes

    85220

    orm 系列 之 Eloquent演化历程2

    数据库管理相关的代码都放在Schema目录下, 最开始的结构如下: src/Illuminate/Database/Schema ├── Blueprint.php └── Builder.php 就两个文件...,并且$statements[0]为: create table `users` (`id` int not null auto_increment primary key, `email` varchar...:是前一篇讲的对于Active Record模式中Model的功能,包括了Model、Builder和Relation功能,忘记的可以去看前一篇orm 系列 之 Eloquent演化历程1的内容 Query...我们通过一个比较有意思的命令Make来看下migration的实现,make的作用是新建一个migration文件,其会根据命令函数参数,去读取src/Illuminate/Database/Migrations...当访问 commentable 关联时,ORM 根据commentable_type 字段来判断所属模型的类型并返回相应模型实例。

    2.4K30

    Laravel框架关键技术解析

    ,在实例化对象时,static会根据运行时调用的类来决定实例化对象,而self是根据所在位置的类来决定实例化对象 4.Laravel示例:Illuminate\Database\Eloquent\Model.php...二是数据库连接工厂阶段,\Illuminate\Database\Connectors\ConnectionFactory 三是数据库连接器阶段,\Illuminate\Database\Connectors...\Database\Query\Grammars SQL语句执行阶段,Illuminate\Database\Connection C.Eloquent ORM 1.两个阶段 Eloquent ORM查询构造器的生成...,Illuminate\Database\Eloquent\Model::newQuery() 操作命令的执行,Illuminate\Database\Eloquent\Builder 2.ORM映射最大的好处是将数据表的结构映射成一个类对象...NULL,这些类型的驱动 A.同步类型消息队列:消息 1.消息发送 生成消息类:php artisan make:job QueuedTest —queued Laravel中通过不同的Job类实现消息的封装

    12K20

    Laravel源码分析之模型关联

    \Illuminate\Database\Eloquent\Relations\HasMany 类的实例,Eloquent封装了一组类来处理各种关联,其中 HasMany是继承自 HasOneOrMany...抽象类, 这也正印证了上面说的一对一是一种特殊的一对多关联,Eloquent定义的所有这些关联类又都是继承自 Relation这个抽象类, Relation里定义里一些模型关联基础的方法和一些必须让子类实现的抽象方法...\Database\Eloquent\Relations\hasManyThrough类的实例,实例化 hasManyThrough时的操作跟实例化 BelongsToMany时做的操作非常类似。...关联时,关联数据是「懒加载」的。...意味着在你第一次访问该属性时,才会加载关联数据。不过当查询父模型时,Eloquent 可以「预加载」关联数据。预加载避免了 N + 1 查询问题。

    9.6K10

    Laravel源码解析之Eloquent Model

    上篇文章我们讲了Database的查询构建器Query Builder, 学习了Query Builder为构建生成SQL语句而提供的Fluent Api的代码实现。...Eloquent Model以上文讲到的Query Builder为基础提供了Eloquent Builder与数据库进行交互,此外还提供了模型关联优雅地解决了多个数据表之间的关联关系。...namespace Illuminate\Database\Eloquent; class Builder { public function __construct(QueryBuilder...Model写入 刚才说通过Eloquent Model获取模型时(在 newFromBuilder方法里)会把Model实例的 exists属性设置为true,那么对于新建的Model实例这个属性的值是...总结 本文我们详细地看了Eloquent Model是怎么执行CRUD的,就像开头说的Eloquent Model通过Eloquent Builder来完成数据库操作,而Eloquent Builder

    2.3K50

    【Laravel系列4.4】模型Eloquent ORM的使用(二)

    laravel/framework/src/Illuminate/Database/Eloquent/Collection.php 对象,然后这个对象里面有个 items 属性,是一个数组。...这里路由的 mTest 参数实际上就是我们查询数据的主键 ID ,然后模型就会自动为我们查询相应的数据并注入到 $mTest 参数中。...不过这里需要注意的是,模型默认生成的 QueryBuilder 是 llaravel/framework/src/Illuminate/Database/Eloquent/Builder.php 对象,...而不是我们之前 查询构造器 中的 laravel/framework/src/Illuminate/Database/Query/Builder.php 对象。...但 Eloquent\Builder 的内部持有的一个query 属性依然是 Query\Builder 对象,也就是说在底层,它依然是调用的我们熟悉的那个 查询构造器 来进行工作的。

    2.8K20

    Laravel 7发行说明

    get 方法负责将从数据库中获取的原始数据转换成对应的类型,而 set 方法则是将数据转换成对应的数据库类型以便存入数据库中。...CastsAttributes { /** * 将取出的数据进行转换 * * @param \Illuminate\Database\Eloquent\Model...$post; }); 隐式绑定约束 有时,当在路由中隐式绑定多个 Eloquent 模型时,可能希望对第二个 Eloquent 模型进行约束,使其必须是第一个 Eloquent 模型的子类。...此外,运行器将在第一次测试失败时自动停止: php artisan test 可以传递给 phpunit 命令的任何参数也可以传递给 Artisan test 命令: php artisan test...有时可能希望指定可以尝试多次的任务,但是如果重试是由给定数量的异常触发的,则该任务将失败。在Laravel7中,可以在任务类上定义 maxExceptions 属性: <?

    9K20

    Laravel 学习笔记5.3之 Query Builder 源码解析(下)

    说明:本文主要学习下Query Builder编译Fluent Api为SQL的细节和执行SQL的过程。...实际上,上一篇聊到了\Illuminate\Database\Query\Builder这个非常重要的类,这个类含有三个主要的武器:MySqlConnection, MySqlGrammar, MySqlProcessor...MySqlConnection主要就是在执行SQL时做连接MySql数据库操作,MySqlProcessor主要就是用来对执行SQL后的数据集做后置处理操作,这两点已经在之前上篇聊过,那MySqlGrammar...所以这里可看出Query Builder是在PHP PDO的基础上实现的一层封装,使得用更加面向对象的Fluent API来操作数据库,而不需要写一行SQL语句。...OK, illuminate/database package不仅提供了Query Builder,还提供了Eloquent ORM。

    1.3K51

    3分钟短文:Laravel 从软删除说到模型作用域的概念

    我们从软删除的使用,再顺便说一说模型内的作用域的概念。 代码时间 常规的删除操作分两步进行,一步是把数据从数据库中查询出来,使用laravel模型的方法, 则返回的是一个模型对象。...::destroy(1); 该方法可以可以用于批量删除传入的指定ID数组的条目: Contact::destroy([1, 5, 7]); 当然了,delete方法只是链式调用的一个方法,我们通过查询构造器过滤后的数据集...模型中相关代码如下: use Illuminate\Database\Eloquent\Model;use Illuminate\Database\Eloquent\SoftDeletes;class...创建 app/Scopes/ActiveScope.php 文件: namespace App\Scopes;use Illuminate\Database\Eloquent\Scope;use Illuminate...\Database\Eloquent\Model;use Illuminate\Database\Eloquent\Builder;class ActiveScope implements Scope{

    1.4K30

    Laravel 软删除存在的问题

    1、软删除使用的标记类型是时间类型,通过is null条件查询,删除标记取值不支持定义 //Illuminate\Database\Eloquent\SoftDeletingScope public...function apply(Builder $builder, Model $model) { $builder->whereNull($model->getQualifiedDeletedAtColumn...对应已经存在的表,有些表存在软删除,有些表不存在软删除字段,如果要应用软删除,只能在需要应用的model中一个个添加trait 如果重写Illuminate\Database\Eloquent\SoftDeletestrait...,如果类常量DELETED_AT为null,则不执行相应的软删除操作 4、join操作,只会在对当前模型添加软删除查询条件 5、在belonsToMany关联关系中,如果关联表,中间表,被关联表都有软删除字段...,查询关联关系,不会对中间表应用软删除条件 belonsToMany中的中间表是传入的表名参数,天然没办法获取中间表是否需要应用软删除。

    2.3K20

    3分钟短文 | Laravel原来有2种集合Collection,怪不得老用不对!

    在大多数情况下,将它们视为相同的实例并不会出错。不过在编程中,脑海里时常清晰地区分出正在使用的是那个Collection,可以有效减少不必要的调用。...而集合 Illuminate\Database\Eloquent\Collection 则是通过 eloquent 方法返回数据时创建的,这很有区别。...因为 Illuminate\Database\Eloquent\Collection 是从 Illuminate\Support\Collection 继承过来的,理所当然,拥有基类所没有的许多特性,比如...由于 Illuminate\Database\Eloquent\Collection 和 Illuminate\Support\Collection 之间的关系,我们可以在函数返回值上显式声明返回类型。...写在最后 由于这两个集合之间的可用功能不同,因此对于何时可以使用,或不能使用这些方法,可能会造成混淆(如上所述)。 简化的方法,是将结果全部归为一种类型。

    48310
    领券