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

如果子代在Laravel中没有空值,如何使用whereHas获取记录

在Laravel中,可以使用whereHas方法来获取具有关联模型的记录,同时排除关联模型中的空值。

假设我们有两个模型,一个是Parent模型,另一个是Child模型,它们之间存在一对多的关系,即一个Parent可以拥有多个Child。我们想要获取所有没有空值的Child记录,可以按照以下步骤进行操作:

  1. 首先,在Parent模型中定义与Child模型的关联关系。在Parent模型的代码文件中,使用hasMany方法来定义关联关系,如下所示:
代码语言:txt
复制
public function children()
{
    return $this->hasMany(Child::class);
}
  1. 接下来,在需要获取记录的地方,使用whereHas方法来过滤具有非空关联的Parent记录。在这个例子中,我们假设要获取所有具有非空Child关联的Parent记录,可以按照以下方式进行操作:
代码语言:txt
复制
$parents = Parent::whereHas('children', function ($query) {
    $query->whereNotNull('child_column');
})->get();

在上述代码中,whereHas方法接受两个参数,第一个参数是关联关系的名称(在这里是'children'),第二个参数是一个闭包函数,用于对关联模型进行进一步的查询。在闭包函数中,我们使用whereNotNull方法来排除Child模型中具有空值的记录。

  1. 最后,可以通过$parents变量来访问获取到的Parent记录,如下所示:
代码语言:txt
复制
foreach ($parents as $parent) {
    // 访问Parent记录的属性或方法
}

这样,我们就可以通过whereHas方法在Laravel中获取到具有非空关联的Parent记录。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云数据库(TencentDB)。腾讯云云服务器提供了弹性、安全、高性能的云服务器实例,可满足各种计算需求。腾讯云数据库提供了多种数据库产品,包括关系型数据库、NoSQL数据库和分布式数据库,可满足不同的数据存储需求。

腾讯云云服务器产品介绍链接地址:https://cloud.tencent.com/product/cvm 腾讯云数据库产品介绍链接地址:https://cloud.tencent.com/product/cdb

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

相关·内容

Laravel Eloquent 模型关联关系(下)

从性能上来说,渴求式加载更优,因为它会提前从数据库一次性查询所有关联数据,而懒惰式加载每次查询动态属性的时候才会去执行查询,会多次连接数据库,性能上差一些(数据库操作主要开销在数据库连接上,所以开发过程如果想优化性能...,需要遍历获取作者信息,假设要循环 N 次的话,加上文章模型本身的获取,总共需要进行 N + 1 次查询,而 PHP 对数据库的连接是短连接,每次都要重新连接数据库,所以从性能角度考虑不建议使用这种方式...查询语句如下: 如果你想进一步过滤出文章标题和评论都包含「Laravel学院」的用户,可以在上述闭包函数通过查询构建器进一步指定: $users = User::whereHas('posts',...注:实际开发为了提高查询性能,我们往往是 posts 表冗余提供一个 comments_count 字段,每新增一条评论,该字段加 1,查询的时候直接取该字段即可,从而提高查询的性能。...这样,我们就不需要在每个地方去判断如果文章作者信息为空该如何处理了,因为这种情况下返回的也是一个正常的 User 模型实例。

19.6K30

laravel ORM关联关系的 with和whereHas用法

with 渴求式预加载 可以有效的避免 N+1 问题,用法如下: $books = App\Book::with('author')- get(); 如果有多个关联关系可以用“,”隔开,还可以使用闭包来对关联关系进行限制...: // 获取发布文章标题中有first的用户 $users= User::whereHas('posts', function ($query) { $query- where('title',...'like', '%first%'); })- get(); 结果会查找发布过文章标题包含first的部分用户,有筛选功能 whereHas 就是关联关系上筛选,只筛选符合条件的,适合查找 存在不存在...就像用户发文章, user 存在关联关系 post,如果是 user- with(‘post’),你会得到所有用户和用户发布的文章信息,发文章的用户就没有文章信息,如果是 user- whereHas...这就是我对 with 和 whereHas 的一些理解了 以上这篇laravel ORM关联关系的 with和whereHas用法就是小编分享给大家的全部内容了,希望能给大家一个参考。

4K31
  • Laravel关联模型过滤结果为空的结果集(has和with区别)

    gourpId的所有数据(如果为空该条数据就不返回)。...`deleted_at` is null 如果第二条为空,主记录的关联字段就是NULL。...后来看到了Laravel关联的模型的has()方法,has()是基于存在的关联查询,下面我们用whereHas()(一样作用,只是更高级,方便写条件) 这里我们思想是把判断有没有优惠券数据也放在第一次查询逻辑...显然区分这两个的作用很重要,尤其是列表,不用特意去筛选为空的数据,而且好做分页。...总结 以上所述是小编给大家介绍的Laravel关联模型过滤结果为空的结果集(has和with区别),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。

    3.4K40

    详解Laravel服务容器的绑定与解析

    所以有空的时候逛逛论坛,搜下Google就发现许多关于laravel核心架构的介绍,以及如何使用的网站(确实看完后再去看手册就好理解多了),下面就根据一个我觉得不错的网站上面的教学来记录一下laravel...脚本检索 Laravel 应用程序的实例。...从最终的使用方式来看,laravel容器对服务实例的管理主要包括以下几个方面: 服务的绑定与解析 服务提供者的管理 别名的作用 依赖注入 先了解如何在代码获取到容器实例,再学习上面四个关键 如何在代码获取到容器实例...所以我们服务提供者里面,始终能通过$this- $app访问到laravel容器实例,而不需要再使用app()函数或者App Facade了。...如何理解服务绑定与解析   浅义层面理解,容器既然用来存储对象,那么就要有一个对象存入跟对象取出的过程。这个对象存入跟对象取出的过程laravel里面称为服务的绑定与解析。

    1.9K31

    Laravel5.5 session 的配置及使用示例讲解

    提示信息 首先,如果Laravel使用 session 功能,需要明确以下的知识点: Laravel 并没有使用 PHP 内置的 Session 功能,而且自己实现了一套更加灵活更加强大的 Session...另外,还有一个大家都感到困惑的问题,就是 Laravel 的控制器构造函数是无法获取应用 Session 数据的,这是因为 Laravel 的 Session 通过 StartSession 中间件启动...解决办法是将获取 Session 数据逻辑后置或者构造函数引入 StartSession 之后执行的中间件 ⑵....文档中有说 ,如果你想要从 Session 移除所有数据,可以使用 flush 方法,即 $request->session()->flush(); ,但是个人测试时发现,登录成功进行赋值时,会显示如下的报错...【备注】: 相关 session 的处理代码,可通用,无需修改,此为优势 其实我就明白,这个 session 表 的存在意义是如何的?

    1.4K10

    PSR-各个框架遵循的统一编码规范现代PHPer的开发规范

    > 短输出标签; 一定不可 使用其它自定义标签。 这点相信很多 PHPer 都很容易遵守,而且现实撸代码中一般都是采用正常的标签,因为如果使用 PHP 的短标签<?= ?...比如我们定义变量的时候定义为同一个变量,循环中,可能会直接覆盖,得不到你想要的 自动加载 PHP 的命名空间和类 必须 遵守 PSR-4 自动加载器标准 接着给后面看 PSR-4 的具体解释 类的名称...> 结束标签 对于这个必须省略最后的结束符号平时倒是注意过,毕竟只写框架只写开头 缩进 代码 必须 使用 4 个空格符的缩进,一定不可 用 tab 键 对于缩进这个问题,说是必须使用 4 个空格,但是使用...记录的消息用于诊断、检查和排除应用的操作、稳定性和性能方面的问题。...例如:开发的时候把调试信息写入到文本文件,把网站的流量统计信息记录到数据库等 PSR-3 规范出来之后,达到这种效果的组件太多了,这里就不介绍,如何实现这个接口的类了 PSR-4:自动加载规范 PSR-

    86520

    Laravel学习记录--Model

    使用belongsTo()方法定义反向关联 子模型Comment //获取某评论关联的文章 public function article(){ return $this...,就需要两次查询;如果是多条记录获取关联关系,比如文章列表页获取作者信息,因为每篇文章的作者通过动态属性获取都有一次查询,所以对N条记录来说,需要N+1次查询才能返回需要的结果,对于数据库查询优化角度来说...反向关联 与上述方法基本一致,上述方法我们通过学生id获取其选修的课程,现在通过课程id查询选修的学生 Mclass模型定义一个stus方法,这个方法还是调用belongsToMany();并返回...,本例按照默认拼接规则为 当前模型类名_id;这里就是(Countrie_id)secondKey:中间模型类与关联模型类的关联外键,如果不指定,本例按照默认拼接规则为关联模型类_id;这里就为...调用save方法向Phone模型插入 这里Eloquent自动phones表添加了uid字段,并插入正确的 使用saveMany添加多个 $user = \App\Muser::find

    13.6K20

    Laravel 模型关联基础教程详解

    Laravel 定义模型关联是每个 Laravel 开发者可能已经做过不止一次的事情。但是试图实现关联时可能会遇到各种问题。因为 Laravel 有各种各样的关联,你应该选择哪一个?...如果你不完全理解 Laravel 的关联在这一点上是如何工作的,别担心,读完这篇文章后,你会更好地理解它。 我们应该使用哪个模型关联? 要回答这个问题,首先你要知道有哪些可用的选项。...让我们看看如何在代码定义这种关联。 <?...如果每个供应商都有一个用户,并且每个用户与一个用户历史记录相关联,那么供应商可以通过用户访问用户的历史记录。...此属性表示中间表,可以像任何其他模型一样使用。 举个例子,假设连接的表有 created_at 字段,我们就可以使用 pivot 来获取 created_at 字段。 <?

    5.5K31

    laravel-admin解决表单select联动时,编辑默认选上的问题

    今天开发公司一个功能时,公司开发环境用的是laravel-admin,因为需要用上select联动,所以根据文档说明进行开发,并成功的使用上了,代码我就不重复,大家可以去参考laravel-admin...然后我们的表单,我们再来定义编辑初始时候的,代码如下: $form- select('hezuo', "合作模式")- options(function () { $record = request..., "3" = '测试3', ); $hezuo = $data- hezuo; return [$hezuo = $hezuoList[$hezuo]]; }); 这段代码是根据当前记录...,去获取对应所属那个选项,这样便使select联动编辑时,能够默认选上我们的。...以上这篇laravel-admin解决表单select联动时,编辑默认选上的问题就是小编分享给大家的全部内容了,希望能给大家一个参考。

    1.7K31

    通过 Request 对象实例获取用户请求数据

    而作为最流行的 PHP 框架,Laravel 自然也是为处理用户请求提供了丰富的工具集,从收集、验证、到过滤、编排,可谓是一应俱全,接下来,我们将通过三四篇教程的篇幅来为你详细介绍如何Laravel...获取指定请求字段 上面我们已经给出了获取指定字段的一个方法 get,该方法只能获取通过 GET 请求传递的参数,同理,如果是 POST 请求的话,我们可以通过 post 方法获取对应字段,此次之外...('name'); 我们还可以为 input 方法传递第二个参数作为默认如果请求字段为空的话,则使用该默认: $site = $request->input('site', 'Laravel学院...'); 获取数组输入字段 有的时候,我们表单传递给后端的可能是一个数组,比如一些复选框选中项,这些表单输入框的 name 通常是 name[],如 books[],这个时候传递到后端的 books...的说,非常方便。

    19.7K30

    通过Eloquent实现Repository模式

    ,这就要求使用使用的时候清楚的知道怎么使用,这里的清楚知道怎么用是指根据SOILD原则,优雅的使用Model,本文的目的就是帮助Model的使用者达成优雅的目标。...服务领域对象的存取,如果后端是数据库,就是负责将数据从数据库取出,将对象存入数据库。...有以下几个方案 让findActivePosts返回�Collection,而不是Eloquent\Collection,避免Repository之外使用Eloquent相关的功能 通过custom...下面给出一个建议: 提供非eager loading的方法同时,提供一个eager loading的方法。这可能会被人说:这也不是让用户知道了实现细节了嘛。是的,这方法是一个性能和使用上的妥协。...,限制使用范围),但是这样子会导致想whereHas这种方法执行不成功。

    68430

    Caché 变量大全 ^$GLOBAL 变量

    还可以使用^$global返回有关存在进程私有全局变量的信息。 进程私有全局变量 可以使用^$global获取有关所有命名空间中是否存在进程私有全局变量的信息。...进程私有全局变量不是特定于名称空间的,因此定义进程私有全局变量时,无论当前名称空间如何,此查找都会返回有关^||a的信息。...Nspace分隔符前后不允许有空格 可以使用以下方法测试是否定义了命名空间: DHC-APP>WRITE ##class(%SYS.Namespace).Exists("USER") 1 DHC-APP...如果不提供方向参数,InterSystems IRIS会将排序顺序的下一个全局名称返回给您指定的全局名称。 以下子例程搜索当前名称空间,并将全局名称存储名为global的本地数组。...Merge将每个全局名称添加为具有空的目标下标。

    42720

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

    当然, Laravel ,可以不在数据库层面进行严格的设置,就可以框架代码实现主外键的关联。...这个参数是可选的,如果不填,它会默认找一个叫做 sex_id 的,当然,我们的数据这个字段的,所以我们指定为 sex 。...等等,不对呀,我们模型里面定义的是一个 gender() 方法,怎么在外面使用的是一个属性?别急,我们再来看看源码,看看框架如何把调用属性变成调用一个方法的。...这里我也不多做讲解了,反正如果是在对象调用的时候,调用的是没有明确类模板写下的属性,就会来到这个 __get() 魔术方法。...其实就是第一个参数是一个,然后把它放到第二个参数,这个参数是一个回调函数,然后通过回调函数来使用这个进行其它的操作。这一段可能说得不太清楚,大家可以自己查看源代码然后调试一下就明白了。

    8.9K20

    Laravel如何优雅的使用Swoole

    这一篇主要聊聊Laravel如何优雅的使用Swoole,其实只需简单3步就可以完成。...如果你Swoole业务代码是写在一个叫server.php的文件,那么命令行下输入php server.php开启。...分析一下代码,你可以看到命令参数包括启动、重启、关闭,我图省事只实现了启动部分,如果需要关闭,linux利用kill命令关闭进程,步骤挺简单的: 1.执行 ps -aux|grep artisan命令...,获取pid(有多个进程,杀第一个即可) 2.执行 kill pid命令,pid是第一步你获取的 3.如果想后台值守,一定加上nohup命令!!!...,就可以把各种业务逻辑写进Laravel框架,然后就可以使用Laravel提供的各种高效方便的功能了。

    1.6K10

    完善你的Laravel异常处理

    这篇文章我们来简单梳理一下Laravel中提供的异常处理能力,然后讲一些开发中使用异常处理的实践,如何使用自定义异常、如何扩展Laravel的异常处理能力。...异常实例 Laravel针对常见的程序异常情况抛出了相应的异常实例,这让开发者能够捕获这些运行时异常并根据自己的需要来做后续处理(比如:catch调用另外一个补救方法、记录异常到日志文件、发送报警邮件...SQL执行后判断被修改的行数来判断UPDATE是否成功,但有的情景里执行的UPDATE语句并没有修改记录,这种情况就没法通过被修改函数来判断UPDATE是否成功了,另外在事务执行如果捕获到QueryException...Illuminate\Database\Eloquent\ModelNotFoundException 通过模型的 findOrFail和 firstOrFail方法获取单条记录如果没有找到会抛出这个异常...,而不是仅仅只是当前抛出的异常实例的上下文信息, 错误收集系统可以使用类似下面的代码来获取所有异常的信息。

    2.8K20

    Laravel 编写高级的 Artisan 命令

    在上一篇教程,学院君向大家介绍了什么是 Artisan 命令,系统内置的 Artisan 命令,以及如何编写一个简单的 Artisan 命令。...因此,在这篇教程,我们将更进一步,一起来看下如何编写更加高级的 Artisan 命令,比如带输入参数、选项,以及能够与用户互动,输出图表/进度条的 Artisan 命令。...要为可选参数定义默认,可以这么做: make:migration {name=create_users_table} 选项:必须设、默认以及缩写 选项和参数很像,但是选项有前缀 --,而且可以没有的情况下使用...= 'welcome:message {name : 用户名} {--city : 来自的城市}'; 命令类我们可以通过 this->argument() 方法获取参数值,不带参数返回所有参数值...; } 这样,我们运行 php artisan welcome:message,带上参数和选项信息,就可以输出对应的欢迎信息了: 用户交互 除了命令行运行命令时手动设置参数值和选项获取输入信息之外

    8.2K20

    基于 PHPStorm 编辑器的 Laravel 开发

    引言 本文主要讲述PHPStorm编辑器如何使用PHPStorm的Laravel插件和Laravel IDE Helper来开发Laravel程序,结合个人积累的一点经验来说明使用PHPStorm编辑器来开发程序还是很顺手的...对于 composer.json文件数组key字段可以Composer官网上查找相关解释,包括重要的 require和 require-dev字段解释。...So,安装Laravel Plugin有啥好处:主要就是代码补全。...5、使用PHPStorm的Database链接Laravel程序数据库 PHPStorm中提供了database插件,功能也比较强大,我想用过PHPStorm的应该都知道如何使用,这里聊下一个很好用的一个功能...经常遇到这样的一个情景:数据库装在数据库服务器db.test.com,但本地是登陆不上去的,但 开发服务器host.company.com是可以链接数据库服务器的,那如何使用database来连接数据库服务器呢

    3.7K80

    laravel的一些简单实用功能

    本文主要介绍的是关于laravel的一些简单实用功能,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 让lumen的dd() dump()像laravel一样优雅 composer...dd($queries); // 即可查看执行的sql,执行的时间,传入的参数等等 } 只能查看简单的sql不能看到传入的参数 DB::table('posts')- toSql(); 查询sql记录...如果,你想要将日志文件保存在 storage/logs 目录。...* * @return void */ public function register() { // } } Laravel 如何在模型事件获取某字段修改前的 Issue...以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对ZaLou.Cn的支持。

    1.3K10

    如何搭建一个属于自己的在线wiki文档系统?

    MinDoc是一个在线的文档管理系统,该系统适用于团队、个人等使用。开发者最初的目的是为了便于公司内部使用,仿照看云开发。有laravel版本以及golang版本。...本文中用golang版本介绍如何安装,安装教程其实在GitHub是有的,但是安装,发现作者有几个地方写的不够完善,特此记录此文。...如何获取MinDoc 官网,github,wiki,代码下载,演示版本 搭建环境以及准备工作 搭建环境没有什么特殊的要求,只要能正常运行的的系统即可,本文演示的是centos7.0,1核2G。...redis搭建,看过作者的文章,发现必须要搭建redis,但是实际的搭建中必须要求redis服务。...启动服务 redis-service /opt/redis.conf 配置golang系统环境变量并安装 根据如何获取中介绍的演示版本下载之后,进行解压并将所有的应用程序移动到/opt目录下面(这个目录可自行定义

    10.4K20

    laravel与thinkphp之间的区别与优缺点

    3、Laravel框架提供了大量的闭包 作为菜鸟的我目前只使用了use方法,即如何在函数内部使用外层变量。...4、post传中注意点不同 Laravel框架里,由于其考虑到了跨站攻击,所以如果使用form表单以post方式进行传时,如果不再form表单中加入{{csrf_field()}}则会报出TokenMethodnotfound...6、Laravel里内置了大量的方法供开发者使用 实际应用更接近于”让对象完成一切”的开发思想,比如在后台表单验证的时候,Laravel内置了大量的验证方法。...7、加密方式 TP框架,我们对用户名密码进行加密时使用md5();的方式进行加密。...你可以通过模型查找数据表内的数据,以及将记录添加到数据表。)

    5.6K20
    领券