生成数据库测试数据
laravel中faker
在laravel中已经自动集成,无需手动安装。如需在其他地方使用,可使用以下命令进行安装
composer require fzaninotto/faker
可通过在 config/app.php 增加如下配置使其支持中文:
'faker_locale' => 'zh_CN',
这样去使用它
$randomDigit = $faker->randomDigit;//生成0-9之间的随机数
$randomDigitNotNull = $faker->randomDigitNotNull;//生成1-9之间的随机数
$randomNumber = $faker->randomNumber(5, true);//生成5位整数,true表示严格模式,即只能5位
$randomFloat = $faker->randomFloat(2, 0, 10);//生成浮点数,两位小数点,范围是0-10之间
$numberBetween = $faker->numberBetween(0, 100);//生成随机整数,范围是0-100之间
生成规则还有很多,可以在这里查看具体
点我
在测试数据时,想要使用Faker去生成数据去测试,不可能一条一条的去生成数据吧。
这个时候,就用到了工厂
创建工厂
在测试时,您可能需要在执行测试之前向数据库中插入一些记录。 Laravel允许您使用模型工厂为每个 Eloquent模型
定义默认属性集,而无需在创建此测试数据时手动指定每列的值。
创建工厂命令
php artisan make:factory PostFactory
成功生成后,会将新工厂将放置在您的 database/factories 目录中
还可以在创建工厂时指示工厂创建的模型的名称,–model此选项将使用给定的模型预先填充生成的工厂文件:
php artisan make:factory GoodFactory --model=Good
值得注意的是,这个命令会自动去找与模型名一样的模型进行关联
来,到生成的工厂中编写
通过 faker 属性, 工厂可以访问 Faker PHP 函数库, 它允许你便捷的生成各种随机数据来进行测试
public function definition()
{
//获取三级分类的id
$arr = Category::where('level',3)->pluck('id');
return [
'user_id' => 1,
'title'=>$this->faker->text(20),
'category_id' => $this->faker->randomElement($arr),
'description' => $this->faker->text(40),
'price' => $this->faker->randomFloat(2, 1, 1000),
'stock' => $this->faker->numberBetween(1,9999),
'pics' => [
'http://placeimg.com/640/480/any',
'http://placeimg.com/640/480/any',
'http://placeimg.com/640/480/any',
],
'cover' => 'http://placeimg.com/640/480/any',
'details'=>$this->faker->paragraphs(4,true)
];
}
使用模型工厂
模型工厂定义后,就可以在Eloquent模型上使用
不过,在需要使用的地方要引入HasFactory才可以
class User extends Model
{
use HasFactory;
}
如果是使用的是直接指定工厂创建的模型的名称的时候,他就会默认将HasFactory引入到所对应的模型中
让我们看一些创建模型的例子
make 方法创建模型但不将他们保存至数据库中
$data = Good::factory()->make();
return $data;
这个就是只生成数据,但是不保存到数据库中
使用 count 方法创建一个含有多个模型的集合
$data = Good::factory()->count(10)->make();
return $data;
会生成一个数组
那么,要插入到数据库中,怎么插入呢?
持久化模型
create 方法创建模型实例,并使用 Eloquent 的 save 方法将其持久化到数据库中:
$data = Good::factory()->count(100)->create();
那么,在什么地方去编写生成测试数据的代码呢?总不能放在控制器中吧,
所以,我们可以去生成一个填充文件
专门在这个填充文件中去放这个填充数据的代码
public function run()
{
//生成大量测试用的商品数据
Good::factory()->count(300)->create();
}
然后去填充数据就好了
php artisan db:seed --class=GoodsSeeder
看,数据库已经填充好了
版权声明:
作者:linrux
链接:https://www.tot7.cn/technology/php/44.html
来源:Code林
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论