Php 如何建立Yii2伪造数据库关系
如何使用Yii2 Faker为ORM表创建假记录? 例如:Php 如何建立Yii2伪造数据库关系,php,database,orm,yii2,faker,Php,Database,Orm,Yii2,Faker,如何使用Yii2 Faker为ORM表创建假记录? 例如: 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 -instagr
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.fixture
文件代码:
夹具文件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"))
]
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()
];
关系fixture
user\u details.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"))
]
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()
];
我需要使用faker为用户表中的某个用户创建用户详细信息表的数据对我有效的解决方案是控制主记录的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(),
];
<?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,
];
不幸的是,生成的别名将与记录ID不同步。可能应该将yii2 faker扩展名更改为从1开始以解决此问题。从用户模板中选择要创建的用户数量,然后让faker生成1和您选择的数量之间的随机数。因此,如果您生成50个用户(自动递增的id从1开始),您可以在另一个模板中随机插入一个介于1和50之间的数字。感谢@jagsler,这对我很有用。您可以从用户表中选择随机id:“user_id”=>(new\yii\db\Query())->select(['id'])->from('user')->orderBy(new\yii\db\Expression('rand())->one()['id'],虽然这是可行的,但这是一个黑客。应该有一些其他的解决方案,您可以提供至少一个来自相关实体的随机记录。如果我想生成10个令牌和2个用户呢?