首页
学习
活动
专区
工具
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

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-

    89920

    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

    通过Eloquent实现Repository模式

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

    68930

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

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

    19.8K30

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

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

    8.9K20

    Caché 变量大全 ^$GLOBAL 变量

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

    44120

    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.3K20

    基于 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.8K80

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

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

    5.7K20

    通过 Laravel 创建一个 Vue 单页面应用(二)

    在这个教程中,我们通过学习怎样从 Vue 组件中的 Laravel API 加载异步数据,来继续在 Laravel 中创建一个 Vue 单页应用(SPA)。...我们也会看看相关的错误处理,比如当 API 返回错误,接口如何响应。 如果你没有学习 第一部分,我们通过 Vue Router 和 Laravel 后端组建的 Vue 单页应用(SPA)。...,UI 应该像下面这样: 总结 在这个简短的文章中,我们添加了一个新的路由从无状态的 Laravel API 中来获取一些假的用户。...我们使用 “后置导航” 来针对性的获取数据。 或者采用其他的方式,比如在组件创建的时候从 API 中获取。...在 第三部分 我们尝试在 Vue Router 中使用一个回调来获取数,在导航到组件之前,让你看看如何在渲染 router view 之前获取数据。

    3.4K30

    如何搭建一个属于自己的在线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();的方式进行加密。...你可以通过模型查找数据表内的数据,以及将记录添加到数据表中。)

    6.1K20

    为什么 Laravel 这么优秀?

    这篇文章不会包含所有的代码,但你仍然可以通过这个仓库 godruoyi/laravel-best-practice 的提交记录看到我是如何一一步构建起来的。...Create Course # 接下来我们来看在 Laravel 中是如何优雅的保存数据,这部分的记录你可以参考下面这几个 commit: feat: create course chore: switch...如 Java 的 Spring 会在编译时为 Sprint Container 填充不同的对象,在使用时就能向容器获取不同的值。...container 中设置不同的值;如 CacheServiceProvider 会向容器中注册 Cache 对象,后续在使用 Cache::get 时就使用的是这里注册的 Cache 对象,在注册阶段不应该向容器中获取值...Laravel 会自动帮我们从容器中获取它,如果容器不存在,则会尝试初始化它。

    26710

    【Laravel系列4.1】连接数据库与原生查询

    从 options 这个参数里面,我们可以看出,Laravel 默认使用的是 PDO 连接的数据库,我也没有研究在 Laravel 中如何使用 mysqli 进行连接,因为 PDO 确实已经是事实的连库标准了...它有两个参数,一个是指定的配置文件中的键名,一个是如果没有找到的话,就会给一个默认值。关于这个函数,还记得我们在之前就已经讲过了。...注意,insert() 方法返回的结果是一个布尔值,也就是添加操作的成功失败情况,如果我们想获取新增加的数据的 id ,需要使用 DB::getPdo()->lastInsertId(); 这条语句才可以获取到...通过上面两步,我们的配置就完成了,是不是非常简单,接下来就是在代码中如何使用。...当然,这也是为了框架的通用性,因为 PDO 也是通用的,在工厂中,我们可以看到 Postgres、SQLite、SQLServer 的连接器,如果使用 MySQLi 的话,可就没办法支持这些数据库了哦。

    3.2K50

    如何快速搭建一个属于自己的在线文档管理系统

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

    6.4K20

    基于 Redis + 资源库模式实现 Laravel 应用缓存功能

    今天学院君来给大家演示如何在 Laravel 项目中基于 Redis 实现应用缓存功能,这想必也是很多人日常使用 Redis 最多的业务场景,这里的缓存指的是将数据库查询结果存储到 Redis,其目的是将数据加载从磁盘...在 Redis 系列开篇中已经介绍过,我们可以通过字符串数据结构来实现应用缓存,如果缓存的是对象实例或者集合而非文本字符串,可以通过序列化方式将其转化为文本格式,读取的时候再通过反序列化方式将其还原。...测试引入缓存后的代码 接下来,我们来测试下引入缓存后的代码是否可以正常工作,为了验证确实命中了缓存,我们可以安装 Laravel Debugbar 扩展包进行对比查看: 可以看到在数据库查询记录里面,不存在查询文章记录的操作...你可以到 Redis 命令行客户端去查看对应的缓存数据: 使用 Laravel 自带的缓存组件 当然,在 Laravel 项目中,如果使用 Redis 作为缓存存储器的话,推荐使用自带的缓存组件,在配置好...Redis 连接信息的基础上,只需要将 .env 中环境配置项 CACHE_DRIVER 的值设置为 redis 即可使用 Redis 实现缓存功能: CACHE_DRIVER=redis 其底层的实现原理是在

    2.5K10
    领券