include 资源为 null 时如何处理?

rt,想请问下老师,假如示例中的topic的user_id字段为空时,转换数据就会报错,遇到这种情况应该如何处理?
自己描述不清楚,下面详细说明:
设计user表中有parent_id字段,有的会员会有上级,但是顶级会员的parent_id会为null或者0.

class UserTransformer extends TransformerAbstract
{
    protected $availableIncludes = ['parent'];
    public function transform(User $user)
    {
        return [
            'id' => $user->id,
            'name' => $user->name,
            'nick_name' => $user->nick_name,
            'parent_id' => $user->parent_id,
        ];
    }

    public function includeParent(User $user)
    {
        return $this->item($user->parent,  new static());
    }
}

这是初始的transformer代码,访问下级会员显示正常:

{
    "id": 2,
    "name": "vega02",
    "nick_name": "vega02",
    "parent_id": 1,
    "parent": {    // 这里数据类型为字典
        "id": 1,
        "name": "vega01",
        "nick_name": "vega01",
        "parent_id": null
    }
}

访问顶级会员会报错:

"message": "Argument 1 passed to App\\Transformers\\UserTransformer::transform() must be an instance of App\\Models\\User, null given, called in /home/vagrant/code/wuti_api/vendor/league/fractal/src/Scope.php on line 407"

修改transformer后的代码,解决报错:

...
    protected $availableIncludes = ['parent'];
    public function transform(User $user=null)
    {
        if (!$user) return [];
        return [
            'id' => $user->id,
            'name' => $user->name,
            'nick_name' => $user->nick_name,
            'parent_id' => $user->parent_id,
        ];
    }
...

返回数据:

{
    "id": 1,
    "name": "vega01",
    "nick_name": "vega01",
    "parent_id": null,
    "parent": []    // # 这里数据为数组
}

因为修改之后的parent数据类型会出现不一致的情况,对于app之类处理是比较麻烦的,所以想请问下老师有比较好的解决办法吗?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
liyu001989
最佳答案

我的做法是,没有就是 null。

file

file

5年前 评论
讨论数量: 4
liyu001989

user_id 默认应该是 0 吧,你这是个错误数据啊,没有发布人的话题,你不过滤掉吗

如果有这种情况,应该是 transformer 转换之前判断一下数据是不是模型吧

5年前 评论

@liyu001989 老师,我举的例子和业务逻辑无关,就是想问下比较好的处理方法,后面我重新描述下,麻烦老师您再看下,谢谢!

5年前 评论
liyu001989

我的做法是,没有就是 null。

file

file

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!