php - 如何与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
 -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()
];

我需要使用 faker 为用户表中的某些用户创建 user_details 表的数据

最佳答案

对我有用的解决方案是控制主记录的 ID 生成,并在引用字段中也使用该值。

user.php faker定义:

<?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' => '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="94f8e5e1fde0eefbfad4f9fde0f7fcf1f8f8baf7fbf9" rel="noreferrer noopener nofollow">[email protected]</a>',
        'auth_key' => 'yDL6BzlyxBOAFbK15uQ-Fx_AVEqZhE06',
        'password_hash' => '$2y$13$SRyNY1ZceQdVMjDFEYaNxeTs0yr5raTgRsquzh6Czom/0loAX9C3W',
        'confirmed_at' => 1506074296,
        'flags' => 0,
        'created_at' => 1506074296,
        'updated_at' => 1506074296,
    ],
    'user1' => [
        'id' => 2,
        'username' => 'jaqueline.bartoletti',
        'email' => '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f18285949983df839496989f909d95b18292999e949fdf9e8396" rel="noreferrer noopener nofollow">[email protected]</a>',
        'auth_key' => 'hk1pE_TUoUmqWcxoArOPmRb-t2P7LvKq',
        'password_hash' => '$2y$13$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 开始来解决此问题。

关于php - 如何与Yii2 faker数据库关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38431005/

相关文章:

javascript - 使用 javascript 添加行时无法使用表单验证

php - 将当前页面菜单设置为事件

json - 将整个 Neo4j 数据库/密码结果导出到 GraphJSON

database - 在保持抽象的同时将格式化文本存储在数据库中

java - 来自谷歌的 ORM

java - 如何在 Hibernate 中形成这个复杂的查询?

php - 从我的 $_POST 获取同一行中的另一个值

php: 使用 JSON 查询时间戳表

mysql - MySQL 中有像 Oracle 一样的 dense_rank() 和 row_number() 函数吗?

php - Propel2 diff 使用 PostgreSQL 检测不存在的变化