ThinkPHP5模型visible关联属性遇到数据不一致是怎么避免报错

举例,我在签到模型更具 user_id 关联到 user 这个用户模型中匹配数据,然后通过 visible() 提取需要的字段。

  $rankList = Signin::with(["user"])
            ->where("createtime", ">", Date::unixtime('day', -1))
            ->field("user_id,MAX(successions) AS days")
            ->group("user_id")
            ->order("days DESC,createtime ASC")
            ->limit(10)
            ->select();
        foreach ($rankList as $index => $datum) {
            $datum->getRelation('user')->visible(['user_id', 'user_name','user_portrait']);
        }

虽然以上代码 一般正常情况下 没什么问题,但是遇到 Signin 中包含一些 USER 数据表不存在的 user_id 时就会 致命错误: Call to a member function visible() on null
image.png

当然这个情况也是避免不了的,例如签到过的用户如果在 user 表中被删除,而 signin 表还有保留签到记录, 这个时候BUG 就重现了。

那么如何避免这种问题的出现呢?其中我知道的 就是 删除用户要同时删除 所有相关的签到记录,能不能既是 有不存的 user_id 让他也不报错?

阅读 3.5k
1 个回答
新手上路,请多包涵
foreach ($rankList as $index => $datum) {
    if ($user = $datum->getRelation('user')){
        $user->visible(['user_id', 'user_name','user_portrait']);
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进