Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中与FactoryMuffin的一对多关系?_Php_Testing_Integration Testing_Factory Bot_Factory - Fatal编程技术网

php中与FactoryMuffin的一对多关系?

php中与FactoryMuffin的一对多关系?,php,testing,integration-testing,factory-bot,factory,Php,Testing,Integration Testing,Factory Bot,Factory,我试图使用FactoryMuffin,一个类似于FactoryGirl的php工厂库,为我的集成测试生成测试数据 在我的应用程序中,一个人可以有许多电子邮件和许多令牌。我想在我的工厂里生成一个人,其中包含五封电子邮件和一封令牌,并围绕它编写一些测试 目前,我对工厂的定义如下: FactoryMuffin::define('Person')->setDefinitions([ 'id' => Faker::numberBetween(123456789, 987

我试图使用FactoryMuffin,一个类似于FactoryGirl的php工厂库,为我的集成测试生成测试数据

在我的应用程序中,一个
可以有许多
电子邮件
和许多
令牌
。我想在我的工厂里生成一个
,其中包含五封
电子邮件
和一封
令牌
,并围绕它编写一些测试

目前,我对工厂的定义如下:

FactoryMuffin::define('Person')->setDefinitions([
    'id'         => Faker::numberBetween(123456789, 987654321),
    'name'      => Faker::name()
]);

FactoryMuffin::define('Email')->setDefinitions([
    'id'         => Faker::numberBetween(123456789, 987654321),
    'address'      => Faker::email(),
    'person_id' => 'factory|Person',

]);

FactoryMuffin::define('Token')->setDefinitions([
    'token'         => Faker::numberBetween(1234567891234, 9876543211234),
    'person_id' => 'factory|Person',

]);
我的问题是,当我创建一个
时,它不会创建任何关联的
电子邮件
s或
令牌
s。当我创建一个
令牌
时,它会自动创建一个
,但没有关联的
电子邮件
s


我该怎么处理呢?

根据工厂松饼的工作方式,你不需要创造人。您只需创建电子邮件并访问电子邮件创建的人(另一种方式)。在下面的示例中,我们创建一条消息,然后访问为我们创建的消息的用户

从他们的例子来看这个例子

在您的情况下,您可以创建一封
电子邮件
,并访问
人员
,如下所示

$email = FactoryMuffin::create('Email');
$emailPerson = $email->person;
你甚至可以更进一步,像这样为同一个人创建100封电子邮件和50个代币

$person = FactoryMuffin::create('Person');
$emails = FactoryMuffin::seed(100, 'Email', ['person_id' => $person->id]);
$tokens = FactoryMuffin::seed(50, 'Token', ['person_id' => $person->id]);

谢谢这就是我最终要做的,尽管实际上我的数据库模式比这复杂得多,而且使所有工厂有序运行的代码仍然有点脏
$person = FactoryMuffin::create('Person');
$emails = FactoryMuffin::seed(100, 'Email', ['person_id' => $person->id]);
$tokens = FactoryMuffin::seed(50, 'Token', ['person_id' => $person->id]);