举例,我在签到模型更具 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
当然这个情况也是避免不了的,例如签到过的用户如果在 user 表中被删除,而 signin 表还有保留签到记录, 这个时候BUG 就重现了。
那么如何避免这种问题的出现呢?其中我知道的 就是 删除用户要同时删除 所有相关的签到记录,能不能既是 有不存的 user_id 让他也不报错?