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

通过 Laravel 查询构建实现复杂的查询语句

有时候,我们想要获取的并不是一行或几行记录,而是某个字段,你当然你可以查询到一行记录后从结果对象中获取指定字段,但是 Laravel 我们提供了更便捷的语法: $name = '学院君'; $...你一定有过这样的经历,从数据库获取指定查询结果后,以主键 ID 键,以某个字段构建关联数组,以前,你可能不得不遍历查询结果构建数组才能解决这样的问题, Laravel 中,我们只需查询构建上调用...null查询 NULL 查询就是判断某个字段是否空的查询Laravel 查询构建我们提供了 whereNull 方法用于实现该查询: DB::table('users')->whereNull(...')->get(); 日期查询 关于日常查询查询构建我们提供了丰富的方法,从年月日到具体的时间都有覆盖: DB::table('posts')->whereYear('created_at',...字段相等查询 有的时候,我们并不是字段和具体之间进行比较,而是字段本身之间进行比较,查询构建提供了 whereColumn 方法来实现这一查询: DB::table('posts')->whereColumn

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

Laravel Eloquent 模型关联关系(下)

另外,如果访问的是模型实例上的 author() 方法,返回的不是用户实例了,而是一个关联关系实例,该实例注入了查询构建,所以你可以在其基础上通过方法链的方式构建查询构建进行更加复杂的查询,我们以一个一对多的查询例...: 如果你想进一步过滤出文章标题和评论都包含「Laravel学院」的用户,可以在上述闭包函数中通过查询构建进一步指定: $users = User::whereHas('posts', function...注:实际开发中为了提高查询性能,我们往往是 posts 表中冗余提供一个 comments_count 字段,每新增一条评论,该字段加 1,查询的时候直接取该字段即可,从而提高查询的性能。...所以不管模型实例有多少个,关联结果只会查询一次,加上模型本身查询总共是两次查询列表查询,大大减少了对数据库的连接查询次数,因而有更好的性能表现,推荐使用。...前提是 user_id 允许 null,否则会抛出异常。 空对象模型 如果外键字段 user_id 允许空的话,当我们访问 Post 模型上的 author 属性,默认返回 null

19.5K30

3分钟短文:Laravel模型创建数据条目的2个语法糖

代码时间 我们构建一个hello world页面的时候,已经介绍了如何使用laravel的命令行脚手架创建新的模型文件,以及通过迁移功能创建数据库表。这样就把数据操作衔接起来了。...我们表中还有id字段,created_at字段,updated_at字段,并没有显式赋值。但是你打开数据库表查看结果的时候,发现那些也成功的写入了。...只需添加如下内容: protected $fillable = ['name','venue']; 这样就进允许指定的两个字段写入,其他都会舍弃。...假如有一个字段 is_admin 用于指定是否 ”超级管理员“,如果在程序内不小心使用数组或者其他方式对其进行了写入,将会造成比较大的麻烦。...firstOrCreate 方法还接收第二个参数,用于指定第一个参数查询语句不成立时,创建数据条目使用

1.9K00

为什么 Laravel 这么优秀?

to use pest 家务:切换到使用害虫 add testing for create course endpoint 创建课程终点添加测试 我们知道进行数据操作前,都需要先对数据进行校验。...put($key, $value, $seconds); } 使用 Cache ,我们基本不用关心到底用的是文件缓存还是 Redis 缓存;使用队列也不用关心用的是 sync 队列还是专业的...如 Java 的 Spring 会在编译 Sprint Container 填充不同的对象,使用时就能向容器获取不同的。...container 中设置不同的;如 CacheServiceProvider 会向容器中注册 Cache 对象,后续使用 Cache::get 使用的是这里注册的 Cache 对象,注册阶段不应该向容器中获取值...,完成开发选择自己以及团队合适的,而不是只会写 Java 就觉得其他语言啥都不是。

15310

【译】20个 Laravel Eloquent 小技巧(上)

下面是翻译自 Laravel-News 的一篇教程,总结了 Laravel 的对象关系映射框架(ORM)的几个小技巧。...// 覆盖或者重写一些属性 比如$model->something = transform($something); }); } } 可能最常见的例子之一是创建模型对象设置一些字段...查询多个实体对象 find()方法想必大家都知道的吧?...使用关系模型字段排序 一个更复杂的“技巧”。 如果你有帖子,但要通过最新帖子对它们进行排序? 顶部有最新更新主题的论坛中非常常见的要求,对吧?...定义关于该主题的最新帖子的关系: public function latestPost() { return $this->hasOne(\App\Post::class)->latest(); } 接下来可以我们的控制中用这个神奇的方法来实现

2.2K50

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

实际上,Eloquent 模型类底层的查询也是基于查询构建来实现的,你可以模型类上调用所有查询构建的 Where 查询方法,同样是以流接口的模式构建方法链调用即可。...模型类查询结果空会返回 null。...如果你想要在单条记录返回结果返回 404 响应(控制方法中可能需要用到类似操作),可以通过 firstOrFail 或者 findOrFail 方法找不到对应记录抛出 404 异常,从而简化代码编写...$max = User::whereNotNull('email_verified_at')->max('id'); # 最大 你会发现,如果你掌握了查询构建,就等同于掌握了 Laravel...,并将查询条件作为对应字段设置到模型属性上。

7.9K20

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

今天开始讲如何在 Laravel 中操作数据库,Laravel 我们提供了多种工具实现对数据库的增删改查,我们使用 Laravel 提供的这些数据库工具之前,首先要连接到数据库。...默认情况下,我们通过 Laravel 提供的数据库工具(DB 门面、查询构建、Eloquent模型)连接数据库的时候,都没有显式指定连接,因为我们配置文件中指定了默认的连接 mysql。...')->select(...); DB::connection('mysql_old')->insert(...); 如果你使用的是查询构建进行数据库操作,可以这么指定(和原生操作一样): $users...connection 属性: protected $connection = 'mysql_old'; 这样,模型类上执行查询、插入等操作都会使用这个 mysql_old 数据库连接。...当然,和多个数据库连接类似,你也可以使用时显式进行指定,以查询构建例: DB::connection('read')->table('users')->where(...)

5.2K20

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

AUTO_INCREMENT,`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL)'); 只不过 Laravel 中,我们不推荐这么做,...使用查询构建进行增删改查 接下来,我们开始介绍 Laravel 数据库功能的核心组件 —— 查询构建(说是核心,是因为 Eloquent 模型的底层也是基于这个查询构建),日常开发中,我们与数据库的交互基本都是直接或间接通过它来完成的...,无需手动设置参数绑定来规避 SQL 注入攻击,因为 Laravel 底层会帮助我们自动实现参数绑定,所以推荐使用查询构建进行数据库操作。...更新记录 更新数据库记录通过 update 方法来完成,我们可以该方法中传入待修改字段及对应修改数组: $id = 11; $affectedRows = DB::table('users')->where...如果是数值字段的更新的话,Laravel 还为我们提供了 increment 和 decrement 方法用于快速进行数值增减,默认步长是 1,当然你可以通过第二个参数指定步长: DB::table(

4.1K20

Laravel Eloquent ORM 实现查询表中指定的字段

使用Laravel ORM的Model方法find, get, first方法获取数据对象返回的数据对象的attributes属性数组里会包含数据表中所有的字段对应的键值关系, 那么如何在ORM查询只返回数据表中指定字段的数据呢...由于ORM依赖了QueryBuilder来实现查询QueryBuilder的源码里通过查看get,first方法的实现可以到,他们都可以接收一个数组参数来指定要查询字段: find方法的实现是...getQualifiedKeyName(), '=', $id); return $this- first($columns); } 由于Eloquent Query Builder是依赖查询构建...Laravel的ORM方法查询返回指定的字段可通过如下三种方法来实现 $data = ModelA::find($id, ['column1', 'column2']); $data = ModelA...以上这篇Laravel Eloquent ORM 实现查询表中指定的字段就是小编分享给大家的全部内容了,希望能给大家一个参考。

3.1K21

使用Laravel中的查询构造实现增删改查功能

引言 上一篇介绍了如何在windows环境下跑一个 laravel 项目,这一篇写如何使用 laravel 中的 查询构造 实现增删改查。...查询 控制项目里的 App/Http/Controllers 目录里, 这里我新增一个 TestController 控制, TestController 里新增一个 queryUsers 方法:...小欣欣", head_url: null, age: null, gender: null, level: null } ] 但是用户信息所有字段全部被返回了, 有些时候我们为了安全, 只需要返回指定字段...laravel查询构造可以使用 delete 方法从表中删除记录。...Laravel中的查询构造实现增删改查功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。

4.7K30

3分钟短文:Laravel说要用软删除,可不要真删

Laravel本身支持软删除,只需要进行少量的配置更改,以确保执行delete或destroy,模型的记录不会被实际删除。作为一个例子,我们修改Event模型以支持软删除。...其实原理很简单,就是模型追加一个全局作用域,每个查询子句追加上如下筛选条件: WHERE deleted_at IS NULL laravel已经我们写好这部分逻辑了,模型内引入如下trait:...trait,并手动指定修改,也就是说deleted_at字段,我们使用 Carbon 进行实例化操作。...任何设置deleted_at日期时间的记录,都不会包含在任何查询结果中,因此看起来已经被删除了。...这样操作非常有用,因为误删除的数据,随时可以通过设置 deleted_at = null 而恢复到正常的业务流程中,比如删除的用户,删除的订单,等等其他资源。

2.1K00

结合 Bootstrap + Vue 组件实现 Laravel 异步分页功能

日常开发中,对数据库查询结果进行分页也是一个非常常见的需求,我们可以基于之前介绍的查询方法和前端 HTML 视图实现分页功能,不过从 Laravel 5.3 开始,Laravel 框架就已经我们提供了非常完整的分页解决方案...不管你使用查询构建还是 Eloquent 模型类,都可以一分钟内完成分页功能,Laravel 还为我们提供了丰富的自定义支持,不管是后端的分页,前端的分页链接,还是整个分页视图,都可以按需进行定制化开发...关于如何使用 Laravel 自带的分页功能进行分页,可以参考官方文档中的分页章节,说的非常清楚,在这篇教程中我们就不再一一演示了,不过 Laravel 自带的分页实现的分页链接是动态 URL,不利于...以文章首页列表例,先准备好一个资源控制 PostController 并定义好对应路由,而这些工作我们已经控制教程中已经做好。...:上一页链接(没有则为 null) next_page_url:下一页链接(没有则为 null) path:页面 URL(不带请求参数) last_page:最后一页的页码(循环设置分页码用到) per_page

7.3K20

laravel 学习之路 数据库操作 Migrations

远古时代中小公司中没有一套比较好用的管理表变动的方案的时候相信童鞋们多少都经历过改数据库的痛苦,每次自己本地增加了表或者字段都要记录下来告知其他同事,其他同事也得自己本地修改,还要胆战心惊的改生产跟测试环境的数据库这种经历贼痛苦...那laravel怎样来帮助我们的呢? 这就要说 laravel 内置了表迁移的功能,迁移就像是数据库的版本控制,让你的团队更容易修改和共享程序的数据库结构。...指定 email_verified_at 字段TIMESTAMP类型并且此字段允许写入 NULL 指定 password 字段字符串 rememberToken 这个字段不通用就不多讲具体看手册...NOT NULL ,这个我们并没有迁移中指定,这里就需要解释下了,这个 NOT NULLlaravel 我们默认添加的,那如果确实有字段想让它允许 NULL 怎么办呢?...migrations 表的第4条添加字段的记录没有了,users 表的 deleted_at 字段也没了,再回退一次就把第一次运行迁移的时候的3张表就全删了,如果再运行迁移命令一就又有了。

2.3K20
领券