专栏首页程序员小助手3分钟短文 | Laravel 检验关联模型是否存在的2个必知必会方法

3分钟短文 | Laravel 检验关联模型是否存在的2个必知必会方法

引言

接着我们的Laravel系列说下去。今天的主题是在程序内,用什么方法判断,模型的关联模型是否存在呢?

本文通过对比分析,教会大家如何正确地判断 exists,或判断 null。

学习时间

假设有一个模型 RepairItem,有下面的关联关系:

public function option() {
    return $this->hasOne('RepairOption', 'repair_item_id');
}

如果更新RepairItem的时候,需要同步更新RepairOption数据。这时我们可以使用追加字段的修改器,

public function setOptionArrayAttribute($values)
{
    $this->option->update($values);
}

但是这会有一个问题。如果更新的时候,关联模型有可能不存在。这个时候做 update 更新操作,会返回 None 对象没有 update 方法这样的错误。

所以逻辑上需要一个判断,先判断关联模型是否存在。如果存在,就更新;如果不存在,就创建。那么如何判断关联模型是否存在呢?

其实,在Laravel中,使用 $this->option 援引关联模型时,如果存在,则返回关联模型对象或集合,如果不存在则是 Null 对象。所以我们可以使用判空方式。

比如使用 count 计数,这可以兼容一对一,一对多情景:

if (count($this->option)){   // exists }

在 PHP7.2以后,可以用 exists 方法判断:

本文分享自微信公众号 - 程序员小助手(mql45ea),作者:黄门小李子

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 3分钟短文:Laravel 从软删除说到模型作用域的概念

    上一节我们讲了通过模型方法新建条目,或者更新数据。对于写操作还有更为重要的一个方法, 就是数据的删除。删除数据,有物理删除和软删除的区别。

    程序员小助手
  • 重磅!谷歌Chrome再添标签组黑魔法,微软Edge瑟瑟发抖

    对于极简主义者和收藏家一样,谷歌 Chrome 浏览器带来了一种新的方式来组织标签到 Chrome 标签组。这个功能现在可以在 Chrome 测试版中使用。

    程序员小助手
  • 3分钟短文 | PHP 数组任意位置插入新元素,你是怎么处理的?

    接着我们这个系列的文章说。本文我们聊一聊 PHP 数组,如何在任意位置插入新元素。因为内置函数并没有提供类似 array_insert(&

    程序员小助手
  • Canvas入门到高级详解(下)

    配套视频请戳:https://www.bilibili.com/video/av26151775/

    老马
  • Brain Stimulation:实时EEG触发的TMS对抑郁症患者左背外侧前额叶皮层进行脑振荡同步刺激

    请点击上面“思影科技”四个字,选择关注作者,思影科技专注于脑影像数据处理,涵盖(fMRI,结构像,DTI,ASL,EEG/ERP,FNIRS,眼动)等,希望专业...

    用户1279583
  • 手拉手,用Vue开发动态刷新Echarts组件

    司想君
  • [PHP] PHP PDO与mysql的连接单例防止超时情况处理

    这个数据库类主要处理了单例模式下创建数据库对象时,如果有两次较长时间的间隔去执行sql操作,再次处理会出现连接失败的问题,利用一个cache数组存放pdo对象与...

    陶士涵
  • ​1.3 Spring MVC、Redis介绍 -《SSM深入解析与项目实战》

    专栏链接:https://chenhx.blog.csdn.net/category_10263372.html

    谙忆
  • Vue 进阶必学之高阶组件 HOC(保姆式教学,冲击20k必备)

    高阶组件这个概念在 React 中一度非常流行,但是在 Vue 的社区里讨论的不多,本篇文章就真正的带你来玩一个进阶的骚操作。

    ssh1995
  • MLR(记忆、学习和识别):一种通用的认知模型-应用于智能机器人和系统控制

    原文标题:MLR (Memory, Learning and Recognition): A General Cognitive Model -- applie...

    Jarvis Cocker

扫码关注云+社区

领取腾讯云代金券