代码之家  ›  专栏  ›  技术社区  ›  slickness

如果数据库为空,代码将无法工作

  •  0
  • slickness  · 技术社区  · 7 年前

    如果数据库不包含条目,则代码将不起作用。如果存在条目,则代码有效。有人知道为什么只有在数据库中已经有条目的情况下,代码才起作用吗?

    我得到超时错误:

    Maximum execution time of 30 seconds exceeded
    

    _

    我使用代码创建用户,然后创建与邀请URL相关的用户配置文件。将创建一个长度为7个字符的唯一代码,即个人邀请URL。 我需要循环,因为必须检查代码是否已生成。还是有更好的解决方案?

     protected function create(array $data)
    {
        if($data['gender'])
    
        {
            $avatar = 'defaults\avatars\male.jpg';
        }
    
        else
    
        {
            $avatar = 'defaults\avatars\female.jpg';
        }
    
        if (array_key_exists('team_id', $data) && $data['team_id']){
            $team = $data['team_id'];
        }else{
           $team = Null;
        }
    
        if (isset($data['invited_id']) && $data['invited_id']){
            $invited_from = $data['invited_id'];
        }else{
            $invited_from = Null;
        }
    
        $user = User::create([
            'name' => $data['name'],
            'team_id' => $team,
            'invited_from_id' => $invited_from,
            'username' => $data['username'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
            'birthday' => $data['birthday'],
            'gender' => $data['gender'],
            'slug' => str_slug($data['username']),
            'avatar' => $avatar,
            'active' => false,
            'activation_token' => str_random(255)
        ]);
    
        $user->profile()->save(new Profile());
    
        while (true) {
            $randomstring = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyz"), 0, 7);
            if (Invite::where('url','!=', $randomstring)->exists()) {
                Invite::create([
                'user_id' => $user->id,
                'url' => $randomstring
                ]);
                break;
            }
        }
    
        //store notify for user in database
        $usern = User::find($invited_from);
    
        if($usern) {
            User::find($usern->id)->notify(new NotifyInvite($user));
        }
    
        return $user;
    }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   nakov    7 年前

    问题不在于您的数据库,而在于如果条件不满足,您永远不会中断循环。所以 while(true) 将永远运行。您需要在条件中添加一个默认情况,该情况将退出循环。

    推荐文章