Я вошел в фантастический мир Laravel, и в настоящее время я изучаю возможность наполнения базы данных поддельными данными для тестирования.
У меня есть пара таблиц, с которыми я хочу поработать; проекты и рассказы.
В таблице историй есть столбцы; id, name и project_id (который является fk для таблицы проектов).
Таблица Мои проекты уже заполнена списком из 10 проектов. Теперь мне нужно заполнить 100 историй случайными связанными проектами. У меня есть подход ниже.
public function run()
{
DB::table('stories')->delete();
DB::statement('ALTER TABLE stories AUTO_INCREMENT = 1');
$faker = Faker::create();
foreach(range(1, 100) as $index)
{
Story::create([
'reference' => $faker->numberBetween(1, 9999),
'name' => $faker->sentence(6),
'project_id' => Project::orderBy(\DB::raw('RAND()'))->get()->first()->pluck('id')
]);
}
}
Не знаю, лучший ли это способ делать то, что мне нужно. Однако при выполнении этого кода project_id каждой истории устанавливается в 1; идентификатор первого проекта.
Когда я выполняю следующую команду в tinker ... Она всегда возвращает 1 в качестве идентификатора.
Project::orderBy(\DB::raw('RAND()'))->get()->first()->pluck('id')
Но когда я выполняю следующую команду в tinker ...
Project::orderBy(\DB::raw('RAND()'))->get()->first()
Он каждый раз возвращает случайный проект. Что странно. Потому что, если все до -> pluck () работает, то pluck () должен получить идентификатор собранных элементов ... Верно? Это то, что возвращает приведенная выше команда.
<App\Project #000000000c385908000000000de30942> {
id: 6,
name: "New Bernadetteton",
cover_photo_url: "/uploads/covers/horizon-grass.png",
created_at: "2015-07-08 16:32:15",
updated_at: "2015-07-08 16:32:15" }
Смотрите ниже снимок экрана моего окна терминала, чтобы проиллюстрировать, что я имею в виду.