提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
最近写一个二手商城的小程序的后台接口,开发初期数据库里的商品数据太少,对前端的页面显示开发有些影响,便希望可以批量生成一些数据用于显示
提示:以下是本篇文章正文内容,下面案例可供参考
一、如何实现数据批量生成?
楼主新手,在查阅一些资料后,发现laravel可以利用工厂模型在数据库的表里批量生成我们想要的数据,这样就不用一条一条的在数据库里添加了。
二、实现过程
1.创建工厂模型
代码如下(示例):
创建完的文件在database/factories目录下
php artisan make:factory PostFactory --model=Post
–model=你需要填充的模型
2.编写工厂的规则
在database/factories目录下找到对应的工厂文件在
class SalebookFactory extends Factory
{
/**
* 工厂对应模型名称
*/
protected $model = Salebook::class;
/**
* definition工厂生成的规则定义
*/
public function definition()
{
// 随机在数据表里获取一条数据
$Booktotal=Booklibrary::count()-1;
$Bookskip=mt_rand(0,$Booktotal);
$bookitem=Booklibrary::select("booklibrary_id",'name')->skip($Bookskip)->take(1)->first();
// 随机在数据表里获取一条数据
$catetotal=Category::count()-1;
$cateskip=mt_rand(0,$catetotal);
$cateitem=Category::select('classification_id')->skip($cateskip)->take(1)->first();
// 随机在数据表里获取一条数据
$usertotal=Userss::count()-1;
$userskip=mt_rand(0,$usertotal);
$useritem=Userss::select('id')->skip($userskip)->take(1)->first();
return [
'name' => $bookitem->name,//Booklibrary关联商品模型的商品名
'created_at' => now(),//当前时间
'saleBook_adress'=>'',
'classification_id' => $cateitem->classification_id,//Category关联商品分类的模型的分类id
'users_id'=>$useritem->id,//Userss关联用户模型的用户id
'is_recommend'=>'0',
'is_on'=>'1',
'num'=>'1',
'saleBook_state'=>'0',
'saleBook_price'=>rand(0,30),
'booklibrary_id'=>$bookitem->booklibrary_id,Booklibrary关联商品模型的商品id
"take_over_type"=>rand(0,1),
];
}
3.使用定义好的工厂模型给我们生成需要的商品
我是专门做了一个接口,前端只需填写需要生成的数量 就可以自动在数据表里生成对应数量的商品数据
1、定义路由
2、使用工厂模型批量生成我想要的数据(我是在模型里定义的addData方法)
public function addData(Request $request){
if($request->count>150){
return resReturn(0,'每次的数量不能大于150');
}
if(!$request->count){
return resReturn(0,'请输入生成的数量');
}
$item = Salebook::factory()->count($request->count)->create();
return resReturn(0,$item);
}
Salebook::factory()->count(需要生成的数量)->create();
4.效果
总结
楼主新手,代码要是有可以优化的地方希望大佬们多提点提点