zbm / m2m-seeding

在多对多关系间生成假数据

1.0 2024-05-13 09:12 UTC

This package is auto-updated.

Last update: 2024-09-13 10:09:22 UTC


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的整数