Ссылка на запись прибора в файлах данных yii2 / codeception

Есть ли способ указать связанную строку другого прибора в файле данных приборов в Yii2 / Codeception ActiveFixture? Рассмотрите этот пример отношения пользователь / профиль:

user.php:

return [
'user1' => [
'email' => '[email protected]',
]
];

profile.php:

use common\models\User;
return [
'profile1' => [
'user_id' => User::findOne(['email' => '[email protected]'])->id;
'name' => 'My Name',
]
];

В документации говорится, что «вы можете присвоить псевдоним строке, чтобы позже в вашем тесте вы могли ссылаться на строку через псевдоним». Есть ли способ ссылки на строки внутри другого прибора? Например, используйте что-то вроде $ this-> user (‘user1’) -> id в profile.php? Я не мог найти упоминания о том, как это сделать. Как вы создаете этот вид связанных светильников?

10

Решение

Доступ к данным с псевдонимами возможен только в пределах выделенного Fixture объект через его data собственность после ее load() Метод был выполнен. Единственный способ сделать эти данные доступными из файла данных другого Fixture объект должен зарегистрировать его в каком-то глобальном объекте, например Application объект.

Я обычно просто запрашиваю все необходимые данные перед созданием зависимого набора данных:

use common\models\User;
$users = User::find()->indexBy('email')->all();
return [
'profile1' => [
'user_id' => $users['[email protected]']->id,
'name' => 'My Name',
]
];
5

Другие решения

Я использую Faker с Yii2.
Когда я начал писать тест, я обнаружил, что мне нужны хорошие светильники.
В yii2 есть yii2-faker / FixtureController, который может генерировать приборы.
Больше в документации

Но я получаю ту же проблему, что и автор. Мне нужно создать приспособления для пользователей, профилей (которые содержат user_id) и ролей. Я не нашел решения в документации, как это сделать, но эта работа для меня.

Шаблоны:
users.php

return [
'id' => $index +1 ,
'login' => $faker->unique()->safeEmail,
'password' => $user->hashPassword('123qwe'),
'type' => '0',
'is_active' => '1',
'is_verified' => '1',
'created_at' => time(),
'updated_at' => time(),

];

profiles.php

return [
'id' => $index +1 ,
'user_id' => $index +1 ,
'first_name' => $faker->firstName,
'last_name' => $faker->lastName,
'middle_name' => $faker->optional()->firstName,
'phone' => $faker->unique()->phoneNumber,
'contact_email' => $faker->email

];

Главная особенность здесь — $ index.

`$index`: the current fixture index. For example if user need to generate 3 fixtures for user table, it will be 0..2.

Так что я мог знать, какой идентификатор будет у пользователя, и вставить его в профиль.

После этого я запускаю команду:

php yii fixture/generate users profiles --count=100

И сгенерировали 100 пользователей с профилями.
Надеюсь, это кому-нибудь поможет.

4

По вопросам рекламы [email protected]