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

Laravel Eloquent -如果列值为NULL或0,则不运行关系查询

Laravel Eloquent是Laravel框架中的一种ORM(对象关系映射)工具,用于简化数据库操作。它提供了一种优雅的方式来与数据库进行交互,使开发人员可以通过面向对象的方式来操作数据库,而不需要直接编写SQL语句。

对于列值为NULL或0的情况,Laravel Eloquent提供了一些方法来处理关系查询。以下是一些常用的方法:

  1. whereNotNull:该方法用于筛选出指定列值不为NULL的记录。可以通过链式调用该方法来构建复杂的查询条件。示例代码如下:
代码语言:php
复制
$users = User::whereNotNull('email')->get();
  1. whereNotIn:该方法用于筛选出指定列值不在给定数组中的记录。可以通过链式调用该方法来构建复杂的查询条件。示例代码如下:
代码语言:php
复制
$users = User::whereNotIn('id', [1, 2, 3])->get();
  1. where:该方法用于自定义查询条件。可以通过传递一个匿名函数来定义自己的查询逻辑。示例代码如下:
代码语言:php
复制
$users = User::where(function ($query) {
    $query->whereNotNull('email')->orWhere('age', '>', 18);
})->get();

除了以上方法,Laravel Eloquent还提供了许多其他方法来处理各种查询需求,如orderBy、groupBy、join等。开发人员可以根据具体需求选择合适的方法来进行关系查询。

在腾讯云的生态系统中,没有直接对应的产品与Laravel Eloquent相关。然而,腾讯云提供了一系列云计算产品和服务,如云数据库MySQL、云服务器、云函数等,可以与Laravel框架结合使用,以实现高效的应用开发和部署。具体产品介绍和文档可以在腾讯云官方网站上找到。

参考链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Laravel代码简洁之道和性能优化

经过一番调研之后发现了一个堪称神器的扩展:laravel-upsert 这个 Laravel 扩展查询构建器和 Eloquent 添加了对 INSERT & UPDATE (UPSERT) 和 INSERT...如果互相喜欢,则添加双向联系人关系,插入之前校验是否存在,存在则更新type等字段,不存在则插入双向数据 我们通过这个场景能非常好的体会laravel-upsert的强大,不仅减少了代码量,也减少了sql...这可以是单个记录多个记录。 第二个参数是唯一标识记录的。除 SQL Server 外的所有数据库都要求这些具有PRIMARYUNIQUE索引。 提供要更新的列作为第三个参数(可选)。...默认情况下,将更新所有。您可以提供带有文字原始表达式的列名和键值对(见下文)。...']); User::insertIgnore(['username' => 'foo']); 如果模型使用时间戳,upsert()并且insertIgnore()会自动插入的添加时间戳。

5.7K20

Laravel Eloquent 模型关联关系(下)

另外,如果访问的是模型实例上的 author() 方法时,返回的不是用户实例了,而是一个关联关系实例,该实例注入了查询构建器,所以你可以在其基础上通过方法链的方式构建查询构建器进行更加复杂的查询,我们以一个一对多的查询例...', Post::class) ->whereNull('deleted_at'); }); })->get(); 如果你想过滤文章标题评论都包含「Laravel...`deleted_at` is null ) and `email_verified_at` is not null 如果想要获取没有评论没有标签的文章,可以结合 doesntHave 和...,但如果对性能有较高要求,则不推荐使用,毕竟是要执行多次查询才能逐个统计出来。...前提是 user_id 允许 null,否则会抛出异常。 空对象模型 如果外键字段 user_id 允许空的话,当我们访问 Post 模型上的 author 属性时,默认返回 null

19.5K30

Laravel系列4.3】模型Eloquent ORM的使用(一)

其实,Laravel 中的 Eloquent ORM 也是 Active Record 的实现,这也是现在 ORM 的主流。...总算是运行成功了吧,我们再把修改、删除和简单的查询的代码都放出来,后面再一起看看它们是怎么运行的。...这个参数是可选的,如果不填,它会默认找一个叫做 sex_id 的,当然,在我们的数据中是没这个字段的,所以我们指定为 sex 。...这些可是我最早期写的文章中介绍过的内容,如果不记得的小伙伴可以去到 【PHP的那些魔术方法(一)】https://mp.weixin.qq.com/s/QXCH0ZttxhuEBLQWrjB2_A 复习一下...当然,这只是最简单的一种一对一的关联,Laravel 框架中还可以实现非常复杂的关联,包括一对多,多对一,多对多的关联,这些内容还是大家自己研究怎么使用吧,毕竟我们文章的主旨还是在于搞清楚它们是怎么运行

8.8K20

基于独立的 Laravel Eloquent 组件编写 ORM 模型类

下载 Eloquent ORM 相关扩展包 Eloquent ORM 作为 Laravel 框架自带的 ORM 实现,还可以在 Laravel 框架之外作为独立的 ORM 组件使用。...模型类全局可用(为了编写 Eloquent 模型类,如果只是使用 Laravel 提供的数据库查询构建器功能,则不需要这些操作)。...这里,我们通过设置 $timestamps 属性 false 表示禁用 Eloquent 模型类自动维护时间字段机制。...$album = $post['album']; ... } } 这里的模型类方法和关联查询都可以在 Eloquent 官方文档查询到,这里不详细介绍了,需要注意的是,我们之前在视图模板中都是通过关联数组获取数据库查询结果...完成以上重构后,运行 composer dump-auto 更新自动加载文件,让新增命名空间与目录路径映射关系生效,访问博客应用,首页、专辑页、文章页显示正常,表明代码重构成功。

1.9K10

Laravel学习记录--Model

,'字段名'=>'']) 简单查询 详情访问laravel查询构造器 $model->where()->first()//单行查询 ->find(1)//根据主键查询...,如果是单条记录获取关联关系,就需要两次查询如果是多条记录获取关联关系,比如文章列表页获取作者信息,因为每篇文章的作者通过动态属性获取都有一次查询,所以对N条记录来说,需要N+1次查询才能返回需要的结果...:关联关系的名称 ,如不指定默认为关联方法名type:存放关联类的字段,如不指定结合name构建关联字段(如果nametest,此字段test_type)id :存放关联id(文章视频)如不指定结合...,如不指定默认为关联方法名type :存放关联类的字段,如不指定结合name构建关联字段(如果nametest,此字段test_type)id:存放关联id(文章视频)如不指定结合name构建关联字段...,前提是uid字段允许空,如果不允许空会抛出异常 空对象模型 如果外键字段uid允许空,当我们访问Phone模型上的muser属性(注意这里是属性,而不是方法)时,默认返回nullEloquent

13.5K20

需要掌握的 Laravel Eloquent 搜索技术

Laravel 中可以使用 where 方法实现对给定字段和给定进行比较查询,就是这样简单。 <?...||(查询查询,则可以使用 Eloquent 查询构造器提供的 orWhere 方法。...即可以查询以指定字符开始结尾的数据,也可以查询包含指定字符的数据。模糊查询在我们需要对依稀记得部分数据进行查询时非常实用。...Laravel 中也可以轻松执行对 JSON 数据的查询,这得益于 Laravel 良好的 JSON 支持。 不过在深入研究之前需要注意的一点是:谨记 JSON 的存储是 区分大小写 的。...但是这并不是我们需要关注的,我们仅需将待查询的字符串传给 where 语句即可。返回的结果集即会包含完全匹配的数据,也会包含发音近似的数据。 总结 Laravel 我们提供了简单实用的查询功能。

3.5K10

Laravel 软删除存在的问题

1、软删除使用的标记类型是时间类型,通过is null条件查询,删除标记取值不支持定义 //Illuminate\Database\Eloquent\SoftDeletingScope public...,如果类常量DELETED_ATnull则不执行相应的软删除操作 4、join操作,只会在对当前模型添加软删除查询条件 5、在belonsToMany关联关系中,如果关联表,中间表,被关联表都有软删除字段...被关联表是一个类对象,如果应用了软删除,则会自动附加上软删除条件 6、在hasManyThrough关联关系中,如果关联表,中间表,被关联表都有软删除字段,查询关联关系,会对中间表应用删除条件。...但是,如果查询包含已删除的关联关系,中间表的删除标记条件不会去除。 hasManyThrough中,中间表是通过中间对象传入,可以获取到中间表是否应用软删除。...从上面可以看出,Laravel的软删除,在关联关系中会造成一些查询上条件的歧义,非常容易产生bug.而且,belongsToMany中间表的问题是无解的。

2.2K20

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

Laravel本身支持软删除,只需要进行少量的配置更改,以确保在执行deletedestroy时,模型的记录不会被实际删除。作为一个例子,我们修改Event模型以支持软删除。...其实原理很简单,就是模型追加一个全局作用域,每个查询子句追加上如下筛选条件: WHERE deleted_at IS NULL laravel已经我们写好这部分逻辑了,在模型内引入如下trait:...$dates = ['created_at','deleted_at','started_at','updated_at']; } 保存这些更改之后,下次删除与此模型关联的记录时,deleted_at将被设置当前时间...任何设置deleted_at日期时间的记录,都不会包含在任何查询结果中,因此看起来已经被删除了。...如果你在代码内要坚持查询全量数据,也包含软删除了的数据,那么代码这样写: $events = Event::withTrashed()->get(); 写在最后 本文我们有重温了laravel的模型软删除功能

2.1K00

需要掌握的 Laravel Eloquent 搜索技术

Laravel 中可以使用 where 方法实现对给定字段和给定进行比较查询,就是这样简单。 <?...||(查询查询,则可以使用 Eloquent 查询构造器提供的 orWhere 方法。...即可以查询以指定字符开始结尾的数据,也可以查询包含指定字符的数据。模糊查询在我们需要对依稀记得部分数据进行查询时非常实用。...Laravel 中也可以轻松执行对 JSON 数据的查询,这得益于 Laravel 良好的 JSON 支持。 不过在深入研究之前需要注意的一点是:谨记 JSON 的存储是 区分大小写 的。...但是这并不是我们需要关注的,我们仅需将待查询的字符串传给 where 语句即可。返回的结果集即会包含完全匹配的数据,也会包含发音近似的数据。 总结 Laravel 我们提供了简单实用的查询功能。

4.3K20

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

……… // ……………… // ……………… // ) 上面的 plucks() 就是类似于 array_column() 的函数操作,用于获取数组元素指定的...这里路由的 mTest 参数实际上就是我们查询数据的主键 ID ,然后模型就会自动我们查询相应的数据并注入到 $mTest 参数中。...这是一个连续递进的关系,之前在 查询构造器 的文章中,我们已经看到了它的底层就是调用的 原生查询 操作。那么这回,我们再来看一下 Model 中的方法,在底层是不是调用的是 查询构造器 。...在所有模型都要继承的 laravel/framework/src/Illuminate/Database/Eloquent/Model.php 类中,我们很快就能发现一个 query() 静态方法。...参考文档: https://learnku.com/docs/laravel/8.x/eloquent/9406

2.8K20

Laravel Eloquent 模型关联关系详解(上)

你可能注意到了我们在定义关联关系时,仅仅指定了模型类名,并没有指定通过哪些数据表字段建立关联,这并不是说 Laravel 神通广大,能知过去未来之事,而是因为 Eloquent 对此做了默认的约定。...为什么我们不需要指定 Laravel 就能完成这种关联呢,这是因为如果没有指定 $foreignKey,Eloquent 底层会通过如下方法去拼接: public function getForeignKey...建立相对的关联关系 与一对一一样,我们可以在文章模型中建立与用户模型之间的相对关联关系,而且这种使用场景很普遍,比如在文章详细页列表页显示文章作者信息。...如果是单条记录获取关联关系,就需要两次查询如果是多条记录获取关联关系,比如文章列表页获取作者信息,因为每篇文章的作者通过动态属性获取都有一次查询,所以对N条记录来说,需要「N+1」次查询才能返回需要的结果...可以,Eloquent 我们提供了 with 方法,我们将需要查询的关联关系动态属性(关联方法名)传入该方法,并将其链接到 Eloquent 模型原有的查询中,就可以一次完成关联查询,加上模型自身查询

9.8K40

Laravel5.7 Eloquent ORM快速入门详解

此外,Eloquent 默认主键字段是自增的整型数据,这意味着主键将会被自动转化为 int 类型,如果你想要使用非自增非数字类型主键,必须在对应模型中设置 incrementing 属性 false...,如果主键不是整型,还要设置 keyType 属性 string。...时间戳 默认情况下,Eloquent 期望 created_at 和 updated_at 已经存在于数据表中,如果你不想要这些 Laravel 自动管理的数据,在模型类中设置 $timestamps...firstOrCreate 方法先尝试通过给定/对在数据库中查找记录,如果没有找到的话则通过给定属性创建一个新的记录。...); }); 现在,当调用模型的 delete 方法时,deleted_at 将被设置当前日期和时间,并且,当查询一个使用软删除的模型时,被软删除的模型将会自动从查询结果中排除。

15K41

Laravel源码分析之模型关联

上篇文章我们主要讲了Eloquent Model关于基础的CRUD方法的实现,Eloquent Model中除了基础的CRUD外还有一个很重要的部分叫模型关联,它通过面向对象的方式优雅地把数据表之间的关联关系抽象到了..., $ownerKey = null, $relation = null) { //如果没有指定$relation参数,这里通过debug backtrace方法获取调用者的方法名称...“如果模型的 $attributes属性里没有这个字段,那么会尝试获取模型关联的”: abstract class Model implements ... { public function...不过当查询父模型时,Eloquent 可以「预加载」关联数据。预加载避免了 N + 1 查询问题。...模型关联常用的一些功能的底层实现到这里梳理完了,Laravel把我们平常用的join, where in 和子查询都隐藏在了底层实现中并且帮我们把相互关联的数据做好了匹配。

9.5K10
领券