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

2020-08-13 14:48:34 浏览数 (1)

引言

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

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

学习时间

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

代码语言:javascript复制
public function option() {
    return $this->hasOne('RepairOption', 'repair_item_id');
}

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

代码语言:javascript复制
public function setOptionArrayAttribute($values)
{
    $this->option->update($values);
}

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

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

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

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

代码语言:javascript复制
if (count($this->option)){   // exists }

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

0 人点赞