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

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

laravel模型为我们提供了一层数据库操作层,将数据交互独立出来。 但是久而久之,随着项目的需求不断扩大,最常用的查询操作,同样会有大量的冗余代码。...比如有一个查询条件: $publishedEvents = Event::where('published', '=', 1)->get(); 上述代码最后生成的SQL语句如下: SELECT * FROM...events WHERE `published` = 1; 如果条件 published = 1 在默认的情况下需要开启,我们可以使用laravel模型的 全局作用域 方式为所有查询追加上这个条件。...在模型文件 Event 内头部引入下述类: use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder...语句 where published = 1 就会追加到所有的模型查询方法内,只要是创建生成了 QueryBuilder 对象的,都会附加上此约束语句。

1.4K22

Laravel源码解析之Eloquent Model

上篇文章我们讲了Database的查询构建器Query Builder, 学习了Query Builder为构建生成SQL语句而提供的Fluent Api的代码实现。...这篇文章我们来学习Laravel Database地另外一个重要的部分: Eloquent Model。...通过上面的那些代码我们可以看到对Model调用的这些查询相关的方法最后都会通过 __call转而去调用Eloquent Builder实例的这些方法,Eloquent Builder与底层数据库交互的部分都是依赖...Query Builder来实现的,我们看到在实例化Eloquent Builder的时候把数据库连接的QueryBuilder对象传给了它的构造方法, 下面就去看一下Eloquent Builder的源码...namespace Illuminate\Database\Eloquent; class Builder { public function __construct(QueryBuilder

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

Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()

Laravel 5.5 Linux mint 18 PHPStorm 最近刚玩Laravel,手册源码还没来得及看完就跃跃欲试做了个小项目,其中有个需求是分组查询数据库中的一个字段并返回每个分组中的数量...')- get(); ## 原始表达式# 有时候你可能需要在查询中使用原始表达式。...这些表达式将会被当作字符串注入到查询中,所以要小心避免造成 SQL 注入攻击!...要创建一个原始表达式,可以使用 DB::raw 方法: $users = DB::table('users') - select(DB::raw('count(*) as user_count...参考: Laravel Eloquent groupBy() AND also return count of each group 以上这篇Laravel 实现Eloquent模型分组查询并返回每个分组的数量

4.2K51

需要掌握的 Laravel Eloquent 搜索技术

本文同步至个人博客 需要掌握的 Laravel Eloquent 搜索技术 ,转载请注明出处。 当我们的应用程序访问较少时(例如在项目初期阶段),直接进行项目编码就可以解决大多数问题。...) 查询,则可以使用 Eloquent 查询构造器提供的 orWhere 方法。...即可以查询以指定字符开始结尾的数据,也可以查询包含指定字符的数据。模糊查询在我们需要对依稀记得部分数据进行查询时非常实用。..., ['%foo%']); 你会注意到这条的查询语句有些不同。 首先,除了 like 关键字外还多了些 SQL 语法,因为这里我们传入的是一条 原生 SQL 表达式 。...我们可以在 Laravel 里使用 where 语句,可以使用原生 SQL 语句,甚至可以使用模糊查询和相似查询,所有这些查询功能都是 Laravel 内置提供的开箱即用,非常赞!

3.5K10

3分钟短文 | Laravel 获取模型查询生成的SQL语句

laravel提供了非常好的 debug 支持,只需在 env 文件内指定 debug = true ,就可以在页面打开 debug bar 用于调试。 ?...学习时间 比如有一个原始查询: DB::table('users')->get(); 它生成的SQL语句是 SELECT * FROM users 那么在程序上下文中,应该如何获取并打印这个SQL语句呢...还有一种方法,就是链式调用 QueryBuilder 的 toSql 方法,即可打印当前模型的SQL语句,而并不执行。...DB::table('users')->toSql() 上述方法输出的结果: select * from `users` 当然只要是返回的 QueryBuilder 对象,均可使用。...所以使用where子句查询后,直接打印较为方便。 但是 toSql 获取的只是带参数绑定的SQL,不打印参数。

3K20

需要掌握的 Laravel Eloquent 搜索技术

[ ['title' => 'foo'], ['published' => true], ])->get(); 如果需要实现类似 ||(查询...) 查询,则可以使用 Eloquent 查询构造器提供的 orWhere 方法。...即可以查询以指定字符开始结尾的数据,也可以查询包含指定字符的数据。模糊查询在我们需要对依稀记得部分数据进行查询时非常实用。..., ['%foo%']); 你会注意到这条的查询语句有些不同。 首先,除了 like 关键字外还多了些 SQL 语法,因为这里我们传入的是一条 原生 SQL 表达式。...我们可以在 Laravel 里使用 where 语句,可以使用原生 SQL 语句,甚至可以使用模糊查询和相似查询,所有这些查询功能都是 Laravel 内置提供的开箱即用,非常赞!

4.2K20

Laravel基础

) DB facade实现CURD(原生SQL语句操作数据库 ) 3.1.1 插入数据 (返回bool 插入是否成功) $result = DB::insert('insert into student..., ['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); //自增自减的同时更新...protected $table = 'student'; protected $primaryKey = 'id'; } 3.1 Eloquent ORM查询 all: 通过...//是否开启时间戳自动调节 //使用时间戳存入数据库 protected function getDateFormat() { return time(); } //将数据库里的时间戳取出时不被转换为日期

7.7K30

Laravel源码解析之QueryBuilder

Database 查询构建器 上文我们说到执行 DB::table('users')->get()是由Connection对象执行table方法返回了一个QueryBuilder对象,QueryBuilder...提供了一个方便的接口来创建及运行数据库查询语句,开发者在开发时使用QueryBuilder不需要写一行SQL语句就能操作数据库了,使得书写的代码更加的面向对象,更加的优雅。...$this->columnize($columns); } //将QueryBuilder $columns字段数组转换为字符串 public function columnize(array $columns...通过梳理流程我们知道: Laravel是在第一次执行SQL前去连接数据库的,之所以$pdo一开始是一个闭包因为闭包会保存创建闭包时的上下文里传递给闭包的变量,这样就能延迟加载,在用到连接数据库的时候再去执行这个闭包连上数据库...实例去执行然后返回结果,在编译的过程中QueryBuilder也会帮助我们进行防SQL注入。

1.9K50

Laravel系列4.2】查询构造器

其实就像我们上篇文章中学习过的使用原始 SQL 语句的方式来操作数据库一样,查询构造器这个东西就是在这个原始操作的基础上为我们封装了一系列的接口,能够让我们方便地来操作数据库。...其实,查询构造器就相当于我们将原始 SQL 的操作进行了一次封装而已。而且,在模型中,其实内部调用的也是这个 查询构造器 。也就是说,查询构造器是介于 模型 和 原始语句 操作中间的一层。...use Illuminate\Database\Query\Builder as QueryBuilder; // laravel/framework/src/Illuminate/Database/..."{$table} as {$as}" : $table; return $this; } 看到没有,已经开始在构建原始SQL 语句了。...而且更重要的是,我们也确认了 查询构造器 确实在底层还是使用的 原始SQL 的方式执行的。同时,我们也找到了构造器创建的地方。依然是收获满满的一天呀。

16.8K10

Laravel 7发行说明

引入 Laravel 框架其组件时,应始终使用版本约束,如 ^7.0,因为 Laravel 的主要版本确实包含非兼容性更改。我们会努力确保您可以在一天更短的时间内更新到最新版本。...有关 Laravel Sanctum 的更多信息, 请查看 Sanctum 文档。 自定义 Eloquent 类型转换 自定义 Eloquent 类型转换由 Taylor Otwell 开发贡献....get 方法负责将从数据库中获取的原始数据转换成对应的类型,而 set 方法则是将数据转换成对应的数据库类型以便存入数据库中。...有关 Laravel 7.x 中的 CORS 支持的更多信息,请查阅CORS文档。 查询时类型转换 查询时类型转换由 Matt Barlow 开发贡献....通过使用 FOR UPDATE SKIP LOCKED 语句进行 SQL 的优化,database 队列驱动可以安全地用于生产环境。

9K20

3分钟短文:Laravel模型集合跟基类真不一样,别混为一谈

引言 laravel在功能拆分上相当灵活,其中查询返回的数据集,虽然继承了基类集合, 但是有一些特定的方法和用法。很多小白在写的时候,往往分不清到底是用的哪个类的哪个方法,导致凭空报错。...代码时间 laravel系统的基类就是 Illuminate\Support\Collection,同时提供了一个快捷助手函数collect 用于实例化一个集合类。...这与原始的集合的方法都有着本质的不同。系统自带的方法在复杂应用下不能满足多元化的需求, 我们这时就需要手动自建集合类,用于特定的操作。 比如在订单模型内,把所有已经支付的订单进行求和返回。...我们手动创建一个eloquent collection 用于操作query builder返回的数据集合。...这样把一些运算操作放在程序内,而非数据库SQL 语句内进行,可进一步提高效率。

1K40

laravel框架模型和数据库基础操作实例详解

分享给大家供大家参考,具体如下: laravel分为三大数据库操作(DB facade[原始查找],查询构造器[Query Builder],Eloquent ORM): use Illuminate\...Support\Facades\DB; 1.DB facade[原始查找] $results = DB::select('select * from users where id = :id', ['id...,[5]); 2.查询构造器[Query Builder] laravel查询构造器提供了方便流畅的接口,用来建立及执行数据库查找语法。...使用了pdo参数绑定,使应用程序免于sql注入,因此传入的参数不需要额外转义特殊字符。基本上可以满足所有的数据库操作,而且在所有支持的数据库系统上都可以执行。...ORM 1.简介、模型的建立及查询数据 简介:laravel所自带的Eloquent ORM 是一个ActiveRecord实现,用于数据库操作。

2.8K20

Laravel Eloquent 模型关联关系(下)

在前面两篇教程中,学院君陆续给大家介绍了 Eloquent 模型类支持的七种关联关系,通过底层提供的关联方法,我们可以快速实现模型间的关联,并且进行关联查询。...在 Eloquent 模型上进行关联查询主要分为两种方式,一种是懒惰式加载(动态属性),一种是渴求式加载(通过with方法)。...,比如我们想要过滤包含评论标签的文章: $posts = Post::has('comments')->orHas('tags')->get(); 如果你想要通过更复杂的关联查询过滤模型实例,还可以通过...', function ($query) { $query->where('title', 'like', 'Laravel学院%'); })->get(); 底层执行的 SQL 查询语句如下...', Post::class) ->whereNull('deleted_at'); }); })->get(); 如果你想过滤文章标题评论都包含「Laravel

19.5K30

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

1、简介 Laravel 让连接多种数据库以及对数据库进行查询变得非常简单,不论使用原生 SQL、还是查询构建器,还是 Eloquent ORM。...目前,Laravel 支持四种类型的数据库系统: MySQL Postgres SQLite SQL Server 配置 Laravel 让连接数据库和运行查询都变得非常简单。...读/写连接 有时候你希望使用一个数据库连接做查询,另一个数据库连接做插入、更新和删除,Laravel 使得这件事情轻而易举,不管你用的是原生 SQL,还是查询构建器,还是 Eloquent ORM,合适的连接总是会被使用...如果你想要获取应用中每次 SQL 语句的执行,可以使用listen方法,该方法对查询日志和调试非常有用,你可以在服务提供者中注册查询监听器: <?...Eloquent ORM 的事务。

3.2K71
领券