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

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

我们将那些需要在多处调用的查询条件编写过滤器,然后调用查询代码的地方改为调用过滤器,调用过滤器比编写那些冗长而重复的查询方法更加便捷,可读性也更好。...这样,当我们通过 User 模型类进行查询的时候,就会自动应用全局作用域指定的查询条件了,以 User::all() 例,我们通过 Telescope 的 「Queries」 页面就能看到对应的 SQL...`deleted_at` is null order by `views` desc 如果我们要把这个 SQL 语句转化为查询构建器的话,显然需要编写多个查询方法,而且如果要在多个地方进行这种查询...,比如我要在文章中查询指定类型的文章,可以通过在 Post 模型类中定义如下方法: public function scopeOfType(Builder $query, $type) { return...`deleted_at` is null 动态作用域的调用和移除方式和局部作用域一样。 本系列教程首发在Laravel学院(laravelacademy.org)

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

3分钟短文:Laravel模型作用域,你“节省”更多代码

laravel模型我们提供了一层数据库操作层,数据交互独立出来。 但是久而久之,随着项目的需求不断扩大,最常用的查询操作,同样会有大量的冗余代码。...events WHERE `published` = 1; 如果条件 published = 1 在默认的情况下需要开启,我们可以使用laravel模型的 全局作用域 方式所有查询追加上这个条件。...在模型文件 Event 内头部引入下述类: use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder...$builder) { $builder->where('published', '=', 1); }); } 这样SQL语句 where published = 1 就会追加到所有的模型查询方法内...而声明一个本地作用域,只要遵循laravel的语法规定即可,如下示例: public function scopePublished($query) { return $query->where('published

1.4K22

Laravel源码解析之Eloquent Model

上篇文章我们讲了Database的查询构建器Query Builder, 学习了Query Builder构建生成SQL语句而提供的Fluent Api的代码实现。...这篇文章我们来学习Laravel Database地另外一个重要的部分: Eloquent Model。...Eloquent Model以上文讲到的Query Builder基础提供了Eloquent Builder与数据库进行交互,此外还提供了模型关联优雅地解决了多个数据表之间的关联关系。...Builder的where方法在接到调用请求后直接把请求转给来Query Builder的 where方法,然后get方法也是先通过Query Builder的 get方法执行查询拿到结果数组后再通过...Builder的实现细节我们在上一篇文章里已经说过了这里不再赘述,如果好奇Query Builder是怎么执行SQL操作的可以回去翻看上一篇文章。

2.2K50

orm 系列 之 Eloquent演化历程1

Eloquent Eloquentlaravel中的orm,采取的是active record的设计模式,里面的对象不仅包括领域逻辑,还包括了数据库操作,但是大家平时使用的时候可能没有探究eloquent...初始化 Eloquent首先要对数据库连接做抽象,于是有了Connection类,内部主要是对PDO的一个封装,但是如果只有Connection的话,一个问题是,我们需要直面sql,于是就有了Builder...类,其功能就是屏蔽sql,让我们能用面向对象的方式来完成sql查询功能,Builder应该是sql builder,此时Eloquent的主要的类就如下: 其中Builder负责sql的组装,Connection...负责具体的数据库交互,其中多出来一个Grammar,其负责主要是负责Builder里面存储的数据转化为sql。...负责数据库操作,Builder负责面向对象的sql操作,Grammar负责sql的拼装,Eloquent/Model是Active Record模式的核心Model,同时具备领域逻辑和数据库操作功能,其中数据库操作功能是委托给了

1K30

Laravel5.2之模型关联预加载

说明:本文主要说明Laravel Eloquent的延迟预加载(Eager Loading),使用延迟预加载来减少MySQL查询次数。同时,会将开发过程中的一些截图和代码黏上去,提高阅读效率。...\Illuminate\Database\Query\Builder|\App\Phone whereUpdatedAt($value) * @mixin \Eloquent */ class Phone...static \Illuminate\Database\Query\Builder|\App\Shop whereUpdatedAt($value) * @mixin \Eloquent */ class...预加载查询 (1)嵌套预加载 Eloquent在通过属性访问关联数据时是延迟加载的,就是只有该关联数据只有在通过属性访问它时才会被加载。在查找上层模型时可以通过预加载关联数据,避免N+1问题。...发现:只有4个query,耗时3.58ms,效率提高很多。把原来的N+1这种query改造成了where..in..这种query,效率提高不少。可以用EXPLAIN来查看SQL语句的执行计划。

2.5K41

Laravel学习记录--Model

* 范围应用于给定的 Eloquent 查询生成器 * * @param \Illuminate\Database\Eloquent\Builder $builder...的最后一个参数改为true则查询关联对象本身 通过原生sql语句我们可以更好的理解 当最后一个参数false时 SQL: select `tags`.*, `media_tags`....`tagtable_type` = 'App\Tag' 关联查询 实际上前面提到的渴求式加载与懒惰式加载也归结于关联查询,这里关联查询补充完整 当我们以动态属性的方式去访问关联关系时懒惰式加载 如...提供了便捷的方法新的模型增加至关联中,如你需要为一个Muser模型插入一个新的Phone,这时你无须Phone手动设置musers属性,直接在关联上使用save方法插入Phone即可 如: 用户id...,前提是uid字段允许空,如果不允许空会抛出异常 空对象模型 如果外键字段uid允许空,当我们访问Phone模型上的muser属性(注意这里是属性,而不是方法)时,默认返回nullEloquent

13.4K20
领券