【问题标题】:How to generate and set username in Laravel eloquent?如何在 Laravel eloquent 中生成和设置用户名?
【发布时间】:2021-06-30 11:32:57
【问题描述】:

我在用户表中有一些字段:

id  firstName  lastName userName

这里我需要自动生成并保存一个用户名,用户将只提供名字和姓氏。我尝试过类似的方法,但不确定这段代码。

User.php

class User extends Authenticatable{
...

protected $appends = ['firstName', 'lastName', 'userName'];

protected $attributes = ['userName' => 'default'];

 public static function boot()
    {
        parent::boot(); // TODO: Change the autogenerated stub

        self::creating(function ($model) {
            $randNum = rand(10, 99);
            $userName = $model['firstName'] . $model['lastName'] . $randNum;
            $model->userName = $userName;
        });
    }

}

所以每当我尝试迁移和播种时,它都会显示

“用户名”字段没有默认值

播种机是

 public function run()
 {
        DB::table('users')->insert([
            'firstName' => 'Osman',
            'sureName' => 'Rafi',
            'email' => 'rafi.ogchy@gmail.com',
            'password' => Hash::make('password'),
           
        ]);
 }

【问题讨论】:

    标签: php laravel laravel-7


    【解决方案1】:

    你要找的是Model events

    首先在您的模型上定义一个静态启动方法。然后你可以在那里运行你的用户名生成代码。

    class User extends Model 
    {
        public static function boot()
        {
            parent::boot();
    
            self::creating(function($model){
                $randNum = rand(10, 99);
                $userName = $model['firstName'] . $model['lastName'] . $randNum;
                $model['userName'] = $userName;
            });
        }
    }
    

    这将拦截模型的创建,并生成用户名。

    【讨论】:

    • 它仍然在抛出 SQLSTATE[HY000]: General error: 1364 Field 'userName' doesn't have a default value 错误
    • 将其设置为默认值。 protected $attributes = [ 'userName' => 'default' ];
    • 恐怕。错误仍然存​​在。请注意,我正在尝试运行种子,那里有问题吗?
    • 请用您的种子代码更新您的问题。
    • 请再次检查问题@Linus
    【解决方案2】:

    setUserNameAttributes 功能仅在您将用户名设置为模型时有效,不会自动工作

    您需要定义setFirstNameAttribute 函数并在其中生成您的用户名

    注意:函数名的最后一个单词是 Attribute 而不是 Attributes*

    【讨论】:

      猜你喜欢
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      • 2013-07-16
      • 2022-11-13
      • 1970-01-01
      • 2017-12-27
      相关资源
      最近更新 更多