我尝试使用工厂类播种,但得到BadMethodCallException:调用未定义的方法DatabaseFactor



代码如下:

这是ProductFactory.php文件中的代码,其中我定义了为Product生成的数据

<?php
namespace DatabaseFactories;
use AppModelsProduct;
use IlluminateDatabaseEloquentFactoriesFactory;
use IlluminateSupportStr;
class ProductFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = Product::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
$product_name = $this->faker->unique()->words($nb=4, $asText=true);
$slug = Str::slug($product_name);
return [
'name' => $product_name,
'slug' => $slug,
'short_description' => $this->faker->text(200),
'description' => $this->faker->text(500),
'regular_price' => $this->faker->numberBetween(10,500),
'SKU' => 'DIGI'.$this->faker->unique()->numberBetween(100, 500),
'stock_status' => 'instock',
'quantity' => $this->faker->numberBetween(100, 200),
'image'=> 'digit_'.$this->unique()->numberBetween(1,22).'.jpg',
'category_id' => $this->faker->numberBetween(1,5)
];
}
}

这是CategoryFactory.php文件中的代码,我在其中定义了为类别生成的数据。

<?php
namespace DatabaseFactories;
use AppModelsCategory;
use AppModelsProduct;
use IlluminateDatabaseEloquentFactoriesFactory;
use IlluminateSupportStr;
class CategoryFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = Category::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
$category_name = $this->faker->unique()->words($nb=2, $asText=true);
$slug = Str::slug($category_name);
return [
'name' => $category_name,
'slug' => $slug
//
];
}
}

这是DatabaseSeeder.php,我调用了两个模型

<?php
namespace DatabaseSeeders;
use IlluminateDatabaseSeeder;
use AppModels;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{

AppModelsCategory::factory(6)->create();
AppModelsProduct::factory(22)->create();
}
}
我运行命令php artisan db:seed但是我得到了上面所说的错误,我现在是赌注,因为一切似乎都很好

像这样使用,

$category_name = $this->faker->unique()->numberBetween(1,20);

您的所有其他独特调用都使用$this->faker->unique()...,除了这个:

'image'=> 'digit_'.$this->unique()->numberBetween(1,22).'.jpg',

将其改为使用faker:

'image'=> 'digit_'.$this->faker->unique()->numberBetween(1,22).'.jpg',

最新更新