Class 'User' 未找到
Class 'User' not found
所以我在迁移我的数据库后尝试了一个基本的 php artisan db:seed
但它一直在 cmd 中返回标题错误 -[Symfony\Component\Debug\Exception\FatalErrorException] Class 'User' not found
我尝试过的事情
- php dump-autoload 更新后 class
- php dump-autoload 在 运行
db:seed
函数之前
- 回滚迁移然后 re-running 它
- 回滚迁移,然后 re-running 使用
--seed
语法
- 更改 'Users' 文件的命名空间
下面是迁移
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password', 60);
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('users');
}
}
我相信这里的一切都是正确的,现在这里是用户class。
<?php namespace App;
use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
class User extends Model implements AuthenticatableContract, CanResetPasswordContract {
use Authenticatable, CanResetPassword;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['name', 'email', 'password'];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = ['password', 'remember_token'];
}
现在最后是最重要的数据库播种器
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Model::unguard();
// $this->call('UserTableSeeder');
$this->call('UserTableSeeder');
Model::reguard();
}
}
class UserTableSeeder extends Seeder
{
public function run()
{
DB::table('users')->delete();
User::create(['email' => 'John@doe.com']);
}
}
这就是我的完整语法,如果需要更多文件,请索取它们,我会更新我的问题。
在你的 DatabaseSeeder
根命名空间中你调用了 Class User
。因此它会尝试加载 class User
。然而,您的 class User
的定义在命名空间 App
中。因此,您应该在 DatabaseSeeder
中使用 App\User
或在文件顶部添加 use App\User;
DatabaseSeeder
<?php
use App\User;
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Model::unguard();
// $this->call('UserTableSeeder');
$this->call('UserTableSeeder');
Model::reguard();
}
}
class UserTableSeeder extends Seeder
{
public function run()
{
DB::table('users')->delete();
User::create(['email' => 'John@doe.com']);
}
}
因为 Laravel 8+ 用户 class 现在默认存储在 app/Models
目录中;所以不要使用 App\User
,而是使用上面的 App\Models\User
。
Ps。默认情况下 Laravel 附带一个用户模型,使用那个。如果您删除了该模型,您可以使用 Laravel:
提供的回退
use Illuminate\Foundation\Auth\User;
附带说明一些我发现对调试 artisan 输出非常有用的东西。您应该使用标志 -vvv
,它会向包括完整堆栈跟踪在内的输出消息添加极其冗长的信息。
php artisan migrate -vvv
所以我在迁移我的数据库后尝试了一个基本的 php artisan db:seed
但它一直在 cmd 中返回标题错误 -[Symfony\Component\Debug\Exception\FatalErrorException] Class 'User' not found
我尝试过的事情
- php dump-autoload 更新后 class
- php dump-autoload 在 运行
db:seed
函数之前 - 回滚迁移然后 re-running 它
- 回滚迁移,然后 re-running 使用
--seed
语法 - 更改 'Users' 文件的命名空间
下面是迁移
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password', 60);
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('users');
}
}
我相信这里的一切都是正确的,现在这里是用户class。
<?php namespace App;
use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
class User extends Model implements AuthenticatableContract, CanResetPasswordContract {
use Authenticatable, CanResetPassword;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['name', 'email', 'password'];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = ['password', 'remember_token'];
}
现在最后是最重要的数据库播种器
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Model::unguard();
// $this->call('UserTableSeeder');
$this->call('UserTableSeeder');
Model::reguard();
}
}
class UserTableSeeder extends Seeder
{
public function run()
{
DB::table('users')->delete();
User::create(['email' => 'John@doe.com']);
}
}
这就是我的完整语法,如果需要更多文件,请索取它们,我会更新我的问题。
在你的 DatabaseSeeder
根命名空间中你调用了 Class User
。因此它会尝试加载 class User
。然而,您的 class User
的定义在命名空间 App
中。因此,您应该在 DatabaseSeeder
中使用 App\User
或在文件顶部添加 use App\User;
DatabaseSeeder
<?php
use App\User;
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Model::unguard();
// $this->call('UserTableSeeder');
$this->call('UserTableSeeder');
Model::reguard();
}
}
class UserTableSeeder extends Seeder
{
public function run()
{
DB::table('users')->delete();
User::create(['email' => 'John@doe.com']);
}
}
因为 Laravel 8+ 用户 class 现在默认存储在 app/Models
目录中;所以不要使用 App\User
,而是使用上面的 App\Models\User
。
Ps。默认情况下 Laravel 附带一个用户模型,使用那个。如果您删除了该模型,您可以使用 Laravel:
提供的回退use Illuminate\Foundation\Auth\User;
附带说明一些我发现对调试 artisan 输出非常有用的东西。您应该使用标志 -vvv
,它会向包括完整堆栈跟踪在内的输出消息添加极其冗长的信息。
php artisan migrate -vvv