【问题标题】:laravel requiring name in fillable array while it's in itlaravel 在可填充数组中需要名称
【发布时间】:2022-01-14 20:52:12
【问题描述】:

我的问题是当我注册一个新用户时,在我提交发布请求后它会抛出一个异常,说 Add [name] to fillable property to allow mass assignment on [Illuminate\Foundation\Auth\User] 并且它已经存在于可填充中。

namespace App\Http\Controllers\Auth;

/*imports here*/

class SignupController extends Controller
{
    public function store(Request $request)
    {
        $this->validate($request, [
            'name' => 'required',
            'surname' => 'required',
            'username' => 'required|min:3|max:20',
            'phone' => 'required',
            'email' => 'required',
            'password' => 'required|confirmed',
        ]);

        User::create([
            'name'=> $request->name,
            'surname'=> $request->surname,
            'username'=> $request->username,
            'phone'=> $request->phone,
            'email'=> $request->email,
            'password'=> Hash::make($request->password),
        ]);
    }
}

当我执行php artisan migrate 时,它会抛出

Migrating: 2022_01_14_124437_add_username_to_users_table

   Error

  Call to undefined method Illuminate\Database\Schema\MySqlBuilder::dropColumnIfExists()

  at C:\Users\xxgam\OneDrive\Desktop\projects\deneme\vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php:261
    257▕         if (! $instance) {
    258▕             throw new RuntimeException('A facade root has not been set.');
    259▕         }
    260▕
  ➜ 261▕         return $instance->$method(...$args);
    262▕     }
    263▕ }
    264▕

  1   C:\Users\xxgam\OneDrive\Desktop\projects\deneme\database\migrations\2022_01_14_124437_add_username_to_users_table.php:16
      Illuminate\Support\Facades\Facade::__callStatic("dropColumnIfExists")

  2   C:\Users\xxgam\OneDrive\Desktop\projects\deneme\vendor\laravel\framework\src\Illuminate\Database\Migrations\Migrator.php:394
      AddUsernameToUsersTable::up()

C:\Users\xxgam\OneDrive\Desktop\projects\deneme>php artisan migrate:rollback
Rolling back: 2019_12_14_000001_create_personal_access_tokens_table
Rolled back:  2019_12_14_000001_create_personal_access_tokens_table (6.35ms)

C:\Users\xxgam\OneDrive\Desktop\projects\deneme>php artisan migrate
Migrating: 2019_12_14_000001_create_personal_access_tokens_table
Migrated:  2019_12_14_000001_create_personal_access_tokens_table (264.26ms)
Migrating: 2022_01_14_124437_add_username_to_users_table
Migrated:  2022_01_14_124437_add_username_to_users_table (115.22ms)

用户类

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    protected $fillable = [
        'name',
        'surname',
        'username',
        'phone',
        'email',
        'password',
    ];

    protected $hidden = [
        'password',
        'remember_token',
    ];

    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

我只知道laravel的基础知识,所以如果我错过了在这里写的东西,请告诉我,我会写的。

【问题讨论】:

  • 没有dropColumnIfExists 方法,顺便说一句
  • 有,但我只是在问题中删除了它,所以它更短

标签: php laravel authentication model-view-controller


【解决方案1】:

您似乎引用了错误的模型。您的User 模型是App\Models\User,但您引用的是Illuminate\Foundation\Auth\User。调整别名以在控制器中使用正确的用户模型:

use App\Models\User;

【讨论】:

    【解决方案2】:

    我猜你不小心从迁移文件中删除了一些代码。

    您可以将此代码与您拥有的代码进行比较。

    检查用途和

    扩展迁移

    <?php
    
    use Illuminate\Database\Migrations\Migration;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Support\Facades\Schema;
    
    class CreateFailedJobsTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('<your_table_name>', function (Blueprint $table) {
                \\your columns
            });
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::dropIfExists('failed_jobs');
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 2012-03-20
      • 1970-01-01
      相关资源
      最近更新 更多