如何建立 Yii2 faker 数据库关系
how to Yii2 faker database relation
如何使用 Yii2 Faker 为 ORM table 创建虚假记录?
例如:
User:
-id
-email
-password
-auth_key
-password_reset_token
-name
-family
-user_img
-is_admin
users_detail:
-id
-user_id
-phone_number
-country
-city
-facebook_url
-googleplus_url
-linkedin_url
-instagram_url
-comment
app.tests.codeception.unit.templates.fixtures
文件代码:
夹具文件User.php
return [
"email" => $faker->email,
"password" => Yii::$app->getSecurity()->generatePasswordHash('password_' . $index),
"auth_key" => Yii::$app->getSecurity()->generateRandomString(),
"password_reset_token" => Yii::$app->getSecurity()->generateRandomString(),
"name" => $faker->firstName,
"family" => $faker->lastName,
"user_img" => $faker->image(Yii::getAlias("@app/web/uploads/users"), 200, 200, null, false),
"is_admin" => $faker->randomElement(array("1", "0"))
]
关系夹具 user_details.php
return [
"user_id" => ??? I don't know ???,
"phone_number" => $faker->phoneNumber,
"country" => $faker->country,
"city" => $faker->city,
"facebook_url" => $faker->optional()->url,
"googleplus_url" => $faker->optional()->url,
"linkedin_url" => $faker->optional()->url,
"instagram_url" => $faker->optional()->url,
"comment" => $faker->optional()->realText()
];
我需要为用户 table
中的某些用户使用伪造者为 user_details table 创建数据
对我有用的一个解决方案是控制主记录的 ID 生成,并在引用字段中也使用该值。
user.php 伪造者定义:
<?php
/**
* @var $faker \Faker\Generator
* @var $index integer
*/
$security = Yii::$app->getSecurity();
return [
'id' => $index + 1,
'username' => $faker->userName,
'email' => $faker->email,
'auth_key' => $security->generateRandomString(),
'password_hash' => $security->generatePasswordHash( 'password_' . $index ),
//'password_reset_token' => $security->generateRandomString() . '_' . time(),
'confirmed_at' => time(),
//'last_login_at' => time(),
'flags' => 0,
'created_at' => time(),
'updated_at' => time(),
];
相关token.php faker 定义:
<?php
/**
* @var $faker \Faker\Generator
* @var $index integer
*/
$security = Yii::$app->getSecurity();
return [
'user_id' => $index + 1,
'code' => $security->generateRandomString(),
'created_at' => time(),
'type' => 1,
];
$index 变量默认以 0 开头。MySQL 不喜欢 ID 0 值,因此需要添加 +1。
这将生成 user.php 固定装置,如:
<?php
return [
'user0' => [
'id' => 1,
'username' => 'arjun.lindgren',
'email' => 'lquitzon@mitchell.com',
'auth_key' => 'yDL6BzlyxBOAFbK15uQ-Fx_AVEqZhE06',
'password_hash' => 'y$SRyNY1ZceQdVMjDFEYaNxeTs0yr5raTgRsquzh6Czom/0loAX9C3W',
'confirmed_at' => 1506074296,
'flags' => 0,
'created_at' => 1506074296,
'updated_at' => 1506074296,
],
'user1' => [
'id' => 2,
'username' => 'jaqueline.bartoletti',
'email' => 'stehr.reginald@schoen.org',
'auth_key' => 'hk1pE_TUoUmqWcxoArOPmRb-t2P7LvKq',
'password_hash' => 'y$IsQxrCaLX4ficjulKKSEbucgLfTyyFSLle30efejBw1giKhwILGSm',
'confirmed_at' => 1506074296,
'flags' => 0,
'created_at' => 1506074296,
'updated_at' => 1506074296,
],
];
和token.php:
return [
'token0' => [
'user_id' => 1,
'code' => 'nr3oU86ukLjb1oKIlKDBgnj0bWb96mNH',
'created_at' => 1506074295,
'type' => 1,
],
'token1' => [
'user_id' => 2,
'code' => 'TTLcxuS_d_sYDME9m7VShbDsOMEVBqZq',
'created_at' => 1506074295,
'type' => 1,
],
];
很遗憾,生成的别名将与记录 ID 不同步。可能应该将 yii2-faker 扩展更改为从 1 开始以解决此问题。
如何使用 Yii2 Faker 为 ORM table 创建虚假记录? 例如:
User:
-id
-email
-password
-auth_key
-password_reset_token
-name
-family
-user_img
-is_admin
users_detail:
-id
-user_id
-phone_number
-country
-city
-facebook_url
-googleplus_url
-linkedin_url
-instagram_url
-comment
app.tests.codeception.unit.templates.fixtures
文件代码:
夹具文件User.php
return [
"email" => $faker->email,
"password" => Yii::$app->getSecurity()->generatePasswordHash('password_' . $index),
"auth_key" => Yii::$app->getSecurity()->generateRandomString(),
"password_reset_token" => Yii::$app->getSecurity()->generateRandomString(),
"name" => $faker->firstName,
"family" => $faker->lastName,
"user_img" => $faker->image(Yii::getAlias("@app/web/uploads/users"), 200, 200, null, false),
"is_admin" => $faker->randomElement(array("1", "0"))
]
关系夹具 user_details.php
return [
"user_id" => ??? I don't know ???,
"phone_number" => $faker->phoneNumber,
"country" => $faker->country,
"city" => $faker->city,
"facebook_url" => $faker->optional()->url,
"googleplus_url" => $faker->optional()->url,
"linkedin_url" => $faker->optional()->url,
"instagram_url" => $faker->optional()->url,
"comment" => $faker->optional()->realText()
];
我需要为用户 table
中的某些用户使用伪造者为 user_details table 创建数据对我有用的一个解决方案是控制主记录的 ID 生成,并在引用字段中也使用该值。
user.php 伪造者定义:
<?php
/**
* @var $faker \Faker\Generator
* @var $index integer
*/
$security = Yii::$app->getSecurity();
return [
'id' => $index + 1,
'username' => $faker->userName,
'email' => $faker->email,
'auth_key' => $security->generateRandomString(),
'password_hash' => $security->generatePasswordHash( 'password_' . $index ),
//'password_reset_token' => $security->generateRandomString() . '_' . time(),
'confirmed_at' => time(),
//'last_login_at' => time(),
'flags' => 0,
'created_at' => time(),
'updated_at' => time(),
];
相关token.php faker 定义:
<?php
/**
* @var $faker \Faker\Generator
* @var $index integer
*/
$security = Yii::$app->getSecurity();
return [
'user_id' => $index + 1,
'code' => $security->generateRandomString(),
'created_at' => time(),
'type' => 1,
];
$index 变量默认以 0 开头。MySQL 不喜欢 ID 0 值,因此需要添加 +1。
这将生成 user.php 固定装置,如:
<?php
return [
'user0' => [
'id' => 1,
'username' => 'arjun.lindgren',
'email' => 'lquitzon@mitchell.com',
'auth_key' => 'yDL6BzlyxBOAFbK15uQ-Fx_AVEqZhE06',
'password_hash' => 'y$SRyNY1ZceQdVMjDFEYaNxeTs0yr5raTgRsquzh6Czom/0loAX9C3W',
'confirmed_at' => 1506074296,
'flags' => 0,
'created_at' => 1506074296,
'updated_at' => 1506074296,
],
'user1' => [
'id' => 2,
'username' => 'jaqueline.bartoletti',
'email' => 'stehr.reginald@schoen.org',
'auth_key' => 'hk1pE_TUoUmqWcxoArOPmRb-t2P7LvKq',
'password_hash' => 'y$IsQxrCaLX4ficjulKKSEbucgLfTyyFSLle30efejBw1giKhwILGSm',
'confirmed_at' => 1506074296,
'flags' => 0,
'created_at' => 1506074296,
'updated_at' => 1506074296,
],
];
和token.php:
return [
'token0' => [
'user_id' => 1,
'code' => 'nr3oU86ukLjb1oKIlKDBgnj0bWb96mNH',
'created_at' => 1506074295,
'type' => 1,
],
'token1' => [
'user_id' => 2,
'code' => 'TTLcxuS_d_sYDME9m7VShbDsOMEVBqZq',
'created_at' => 1506074295,
'type' => 1,
],
];
很遗憾,生成的别名将与记录 ID 不同步。可能应该将 yii2-faker 扩展更改为从 1 开始以解决此问题。