zbm / m2m-seeding
在多对多关系间生成假数据
1.0
2024-05-13 09:12 UTC
Requires
- php: 8.*
README
此包通过一些函数在两个具有多对多关系的模型之间生成假数据,非常有用
安装
composer require zbm/m2m-seeding
使用
基本使用
use m2m\seeding\M2MSeeding; M2MSeeding::make(FirstModel::class, SecondModel::class, 'relation') ->run();
- 首先调用静态函数make(),传入所需的第一和第二个模型,以及从第一个模型到第二个模型的关联名称
- 然后调用run()来生成假数据
模型工厂
如果您想使用工厂生成模型,可以调用withFactory()函数
use m2m\seeding\M2MSeeding; M2MSeeding::make(FirstModel::class, SecondModel::class, 'relation') ->withFactory(10, 10) ->run();
第一个参数是第一个模型中的工厂数量,第二个参数是第二个模型
检测关系数量
您可以使用此函数确定模型之间的关系数量
->minRelation(10)
确定关系的最小数量(默认值为0)。
->maxRelation(10)
确定关系的最大数量(默认值为3)。
->rangeRelation(2, 5)
确定关系的最小和最大数量。
生成枢纽数据
如果枢纽有一些数据,您也可以使用withPivot()函数生成它
->withPivot(function (){ return [ 'first_column' => rand(1, 10), 'second_column' => fake()->word, 'third_column' => true, ]; })
此函数接受回调函数,返回键(列名)和值(列值)的数组
示例
第一个模型
class Post extends Model{ public function reactions(){ return $this->belongsToMany(User::class, 'reactions'); } }
第二个模型
class User extends Model{ }
反应表
- id
- user_id
- post_id
- reaction_type
生成
use m2m\seeding\M2MSeeding; M2MSeeding::make(Post::class, User::class, 'reactions') ->withFactory(20, 100) ->rangeRelation(50, 80) ->withPivot(function (){ return [ 'reaction_type' => rand(1, 6) ]; }) ->run();
这些行将创建20个帖子,100个用户,每个帖子有50到80个反应,每个反应的类型为1到6的整数