Laravel 模型关联查询已物理删除的数据设置默认值

在使用Laravel模型关联数据时,会遇到关联查询到的数据已被删除,会导致查询结果为null

1
2
3
4
5
.......
"created_at": "2023-02-15 16:01:40",
"updated_at": "2023-02-15 16:03:22",
"category": null,
.......

如果想要保证查询结果不会出现null,可以使用 Laravel 的「Eloquent」 ORM 中的「withDefault」方法来设置默认值。例如:

1
2
3
4
public function category()
{
return $this->hasOne(Category::class, 'id', 'cate_id')->withDefault();
}

这样,即使没有找到匹配的记录,您也可以得到一个具有默认值的结果

1
2
3
4
5
6
7
.......
"created_at": "2023-02-15 16:01:40",
"updated_at": "2023-02-15 16:03:22",
"category":{
"id": 437
}
.......

如果我们还想要默认分类名称值(分类名称字段我定义的是name

1
2
3
4
public function category()
{
return $this->hasOne(Category::class, 'id', 'cate_id')->withDefault(['name'=>'分类已删除']);
}

这样,查询结果是

1
2
3
4
5
6
7
8
.......
"created_at": "2023-02-15 16:01:40",
"updated_at": "2023-02-15 16:03:22",
"category":{
"id": 437,
"name": "分类已删除"
}
.......
坚持原创技术分享,您的支持将鼓励我继续创作!
0%