php 模型 with,laravel 关联模型中withDefault方法的作用

本文介绍了Laravel框架中Eloquent ORM的withDefault方法,该方法用于处理关联模型返回null的情况。当关联的用户数据不存在时,withDefault会返回一个空对象或者指定的默认值,避免在json_encode后出现空数组或不完整数据。通过示例展示了withDefault的使用方法,以及如何设置默认返回值,确保数据的完整性和一致性。
摘要由CSDN通过智能技术生成

withDefault 方法为什么会存在?

laravel提供了非常好用的关联模型使用,正常情况下 文章对应的添加用户是存在的,如果用户表中的数据删除,那么关联模型就会返回一个null值。

就是为了解决返回null所带来问题的。

举例说明:

在没有使用withDefault方法时候:

1 <?php2

3 namespace App;4

5 useIlluminate\Database\Eloquent\Model;6

7 class PostsModel extendsModel8 {9

10 protected $table = ‘posts‘;11

12 protected $guarded =[];13

14 //获取用户

15 public functionuser()16 {17 return $this->belongsTo(UserModel::class, ‘user_id‘, ‘id‘);18 }19

20 }

6e7a886fc9f53aadc7e6aac89c95ba48.png

使用withDefault方法后:

PostsModel.php

1 <?php2

3 namespace App;4

5 useIlluminate\Database\Eloquent\Model;6

7 class PostsModel extendsModel8 {9

10 protected $table = ‘posts‘;11

12 protected $guarded =[];13

14 //获取用户

15 public functionuser()16 {17 return $this->belongsTo(UserModel::class, ‘user_id‘, ‘id‘)->withDefault();18 }19

20 }

使用了 withDefault 方法以后,就会返回空对象

1947f66b4b0d359f59385294a60a0c8d.png

当使用json_encode($posts); 方法后,就会得到下面的结果:

空数组

{"id":3,"title":"test008","content":"test content","user_id":8,"created_at":"2020-02-01 15:31:21","updated_at":"2020-02-01 15:31:21","user":[]}

当然还可以传递一个默认数组,当差找不到数据的时候,直接放默认设置的数据返回:

d6a3b0ee2a86867b1fddff80794cffa4.png

{"id":3,"title":"test008","content":"test content","user_id":8,"created_at":"2020-02-01 15:31:21","updated_at":"2020-02-01 15:31:21","user":{"nam

e":"wangwu"}}

以上就是withDeafult 方法的使用。

如果数据找到,则正常返回

$posts = PostsModel::query()->with(‘user‘)->find(1);

{"id":1,"title":"test001","content":"test content","user_id":1,"created_at":"2020-02-01 15:16:05","updated_at":"2020-02-01 15:16:05","user":{"id"

:1,"name":"james","updated_at":"2020-02-01 15:25:08","created_at":"2020-02-01 15:25:08"}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值