Laravel:在具有自动增量ID的字段上插入随机ID

Posted

技术标签:

【中文标题】Laravel:在具有自动增量ID的字段上插入随机ID【英文标题】:Laravel : insert random id on field have autoincrement id 【发布时间】:2021-10-06 00:35:58 【问题描述】:

我已经生成随机id函数:

class CreateRandomId 
    public static function get_id($my_table) 
        $id = mt_rand(1000000, 9999999999); 
        if(self::check_id($id,$my_table))
            get_id($my_table);
        
        return $id;
    

    public static function check_id($id,$my_table) 
        $table=DB::table($my_table)->where('id',$id)->get();
        if (count($table)==0) 
            return false;
        
        return true;
    

 

我使用它并且它正确生成了 id 但是当我想将它保存为 id 时:

$new_user_id = CreateRandomId::get_id('users');   
    $user = User::create([
        'id' => $new_user_id,
        'social_id'=>$request->id, 
        'client'=> $request->client,  
        'username'=>$request->username,
        'password'=>$password,
        'email'=>$request->email,
        'pics'=>$request->pics,
        'role'=>'user'
    ]);

它不保存随机id,而是auto_incrementid

我查看这个话题How to disable Laravel eloquent Auto Increment? 但我不想删除自动增量我只想插入随机数据而不是它。

【问题讨论】:

确保“id”在用户模型的可填写部分 @dz0nika 我认为你是对的,我会尝试非常感谢 @dz0nika 不会触发批量分配异常。我认为你需要在你的模型中设置public $increment = false; 这能回答你的问题吗? How to disable Laravel eloquent Auto Increment? 嗯,如果他的 ID 字段设置为递增,那么是的,但由于他将随机数字作为 ID,我认为情况并非如此,但仍然很好 【参考方案1】:

让我们结束这个问题,正如您在 cmets 中所说,解决此问题的方法是使 id 字段可填充,使其看起来像这样

protected $fillable = ['id', ...];

【讨论】:

【参考方案2】:

尝试将主键添加到可填充数组中,并将增量设置为 false,如下所示:-

public $increment = false;
protected $fillable = ['id',..];

【讨论】:

以上是关于Laravel:在具有自动增量ID的字段上插入随机ID的主要内容,如果未能解决你的问题,请参考以下文章

自动增量 pymongo

列的工厂相同 ID,自动增量,Laravel

在 Oracle 中插入具有自动增量 ID 的新行

如何在使用存储过程时创建具有自动增量的 id 字段?

具有自动增量的 mongodb 第二个 id 字段

带有Python的Mysql无法插入具有自动增量ID的记录,为啥?