Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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 如何建立Yii2伪造数据库关系_Php_Database_Orm_Yii2_Faker - Fatal编程技术网

Php 如何建立Yii2伪造数据库关系

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

如何使用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
 -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个用户呢?