laravel 需要可填充数组中的名称
laravel requiring name in fillable array while it's in it
我的问题是当我注册一个新用户时,在我提交 post 请求后它抛出一个异常说 Add [name] to fillable property to allow mass assignment on [Illuminate\Foundation\Auth\User]
并且它已经存在于 fillable 中。
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\migrations22_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)
用户Class
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 的基础知识,所以如果我在这里漏掉了要写的东西,请告诉我,我会写出来。
我猜你不小心从迁移文件中删除了一些代码。
您可以将此代码与您拥有的代码进行比较。
检查用途和
extends Migration
<?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');
}
}
您似乎引用了错误的模型。您的 User
模型是 App\Models\User
,但您引用的是 Illuminate\Foundation\Auth\User
。调整您的别名以在您的控制器中使用正确的用户模型:
use App\Models\User;
我的问题是当我注册一个新用户时,在我提交 post 请求后它抛出一个异常说 Add [name] to fillable property to allow mass assignment on [Illuminate\Foundation\Auth\User]
并且它已经存在于 fillable 中。
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\migrations22_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)
用户Class
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 的基础知识,所以如果我在这里漏掉了要写的东西,请告诉我,我会写出来。
我猜你不小心从迁移文件中删除了一些代码。
您可以将此代码与您拥有的代码进行比较。
检查用途和
extends Migration
<?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');
}
}
您似乎引用了错误的模型。您的 User
模型是 App\Models\User
,但您引用的是 Illuminate\Foundation\Auth\User
。调整您的别名以在您的控制器中使用正确的用户模型:
use App\Models\User;