1

我正在尝试使用 laravel 自己的身份验证功能在 laravel 中创建一个用户。我已启用它并希望将一些我自己的值添加到用户表中的字段中。

现在我得到这个错误,但不知道如何解决它。有任何想法吗?:

数组到字符串的转换(SQL:插入users( name, email, password, activation_token, is_active, is_expert, is_flag, is_subscriber, profile_img, updated_at, created_at) 值 (Henrik Tobiassen, tarzan@hotmail.com, $2y$10$.xmKCnSdC8vogY47mbwRVOVehXJIedLMJ/gpfNgluPR9QpOtgyJ1m, 4633, 0, 0, 0, 0 , 上传/profile_pics/default.jpg, 2019-03-10 21:12:29, 2019-03-10 21:12:29)

应用程序/用户.php

 /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password', 'password', 'remember_token', 'activation_token', 'is_active', 'is_expert', 'is_flag', 'is_subscriber', 'profile_img',
    ];

注册控制器

 /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],


        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return \App\User
     */
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
            'activation_token' => [rand(1000, 9999)],
            'is_active' => '0',
            'is_expert' => '0',
            'is_flag' => '0',
            'is_subscriber' => '0',
            'profile_img' => 'uploads/profile_pics/default.jpg',
        ]);
    }
4

3 回答 3

2

这可能是因为您将数组而不是数字或字符串发送到 activation_token 字段。

所以而不是

'activation_token' => [rand(1000,9999)],

'activation_token' => rand(1000,9999),
于 2019-03-10T21:30:04.970 回答
1

可能的原因是您将随机变量设为数组。删除它周围的方括号。这现在将返回一个字符串而不是一个数组。

检查底部的示例以进行演示。

更正的代码:

    protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
        'activation_token' => rand(1000, 9999),
        'is_active' => '0',
        'is_expert' => '0',
        'is_flag' => '0',
        'is_subscriber' => '0',
        'profile_img' => 'uploads/profile_pics/default.jpg',
    ]);
}

示例: http ://sandbox.onlinephpfunctions.com/code/1977ba4dbe2f22870e0e81a628749c39c367747a

于 2019-03-11T01:29:52.677 回答
1

似乎你正在尝试发送一个数组

'activation_token' => [rand(1000,9999)]

而不是字符串/数字

修复->

'activation_token' => rand(1000,9999),
于 2019-03-11T09:48:18.367 回答