引言
接着我们的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 方法判断: