问题描述
运行命令时出现标题错误:
php artisan db:seed
我不知道这个问题是从哪里来的。我在搜索代码示例和解决方案,但没有找到任何东西:(
ArticlesTableSeeder.php
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
// use Laracasts\TestDummy\Factory as TestDummy;
class ArticlesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
factory(App\Models\Article::class,30)->create();
}
}
ArticleFactory.php
<?php
namespace Database\Factories;
use App\Models\Model;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
class ModelFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = App\Models\Article::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
'title' => $faker->text(50),'body' => $faker->text(200)
];
}
}
DatabaseSeeder.php
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call(ArticlesTableSeeder::class);
}
}
预先感谢您的帮助!
解决方法
在laravel 8中,默认路由名称空间已删除。
尝试更改:
ArticlesTableSeeder.php:
factory(App\Models\Article::class,30)->create();
收件人:
\App\Models\Article::factory()->count(30)->create();
ArticleFactory.php:
protected $model = App\Models\Article::class;
收件人:
protected $model = \App\Models\Article::class;
,您可能需要更改:
'title' => $faker->text(50),'body' => $faker->text(200)
收件人:
'title' => $this->faker->text(50),'body' => $this->faker->text(200)
,
尝试更改
factory(App\Models\Article::class,30)->create();
到
App\Models\Article::factory()->count(30)->create();
,
如果您使用的是laravel版本8,请参阅升级指南。 “ Laravel的模型工厂功能已完全重写以支持类,并且与Laravel 7.x样式工厂不兼容。但是,为了简化升级过程,我们创建了一个新的laravel / legacy-factories软件包,以继续将您现有的工厂与Laravel 8.x.您可以通过Composer安装此软件包:
作曲家需要laravel / Legacy-factories”
https://laravel.com/docs/8.x/upgrade#seeder-factory-namespaces
,ArticlesTableSeeder.php
<?php
namespace Database\Seeders;
use App\Models\Article;
use Illuminate\Database\Seeder;
class ArticlesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Article::factory()->times(30)->create();
}
}
ArticleFactory.php
<?php
namespace Database\Factories;
use App\Models\Article;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
class ArticleFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = Article::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
'title' => $this->faker->text(50),'body' => $this->faker->text(200)
];
}
}
,
此处提到的所有建议都是正确的。
但是,如果您使用的是Laravel 8,则必须运行PHP Fatal error: Class 'App/Models/User' not found in Psy Shell code on line 1
才能运行代码。
如果出现错误提示composer require laravel/legacy-factories
然后确保您拥有Class 'Database\Factories\ArticleFactory' not found
而不是ModalFactory。
并确保您在此处的Article Model中使用HasFactory。
class ArticleFactory extends Factory