使用 Laravel Faker 从预先填充的表中填充数据库表

时间:2021-04-04 15:24:11

标签: php mysql laravel factory faker

我想用虚拟数据填充汽车报价列表。

具体是我希望品牌和型号来自已在数据库中创建的表。清单的标题也是 MakeModel。我的代码是这样的,但我认为这是完全错误的:

public function definition()
{
    $id = DB::table('cars')->select('id')->inRandomOrder()->first();
    $make = DB::table('cars')->where('id', $id)->select('make')->first();
    $model = DB::table('cars')->where('id', $id)->select('model')->first();

    return [
        'title' => $make . " " . $model,
        'make' => $make,
        'model' => $model,
        'year' => $this->faker->numberBetween(1950, 2021),
        'slug' => $this->faker->word(),
    ];
}

1 个答案:

答案 0 :(得分:1)

Laravel 中的查询构建器在您使用 first() 获取时返回一个表示数据库模型的对象

当您将属性设置为其他模型属性时,您应该访问这些属性

return [
    'title' => $make->make . " " . $model->model,
    'make' => $make->make,
    'model' => $model->model,
    'year' => $this->faker->numberBetween(1950, 2021),
    'slug' => $this->faker->word(),
];

注意

以上答案仅解决了当前代码中的问题

正确的实现是创建模型(如果不存在)并通过外键将它们与关系联系起来,然后将它们附加到播种机中

工厂应该只包含对虚假数据的清晰和干净的定义

相关问题