gpt4 book ai didi

laravel-5 - laravel 模型工厂种子从现有生成

转载 作者:行者123 更新时间:2023-12-01 11:27:43 24 4
gpt4 key购买 nike

我正在尝试使用外键为表播种,但我一直坚持如何告诉模型从已存在的内容中随机提取值。

模型工厂

$factory->define(App\Vendor::class, function(Faker\Generator $faker) {
return [
'name' => $faker->company,
];
});

$factory->define(App\Device::class, function(Faker\Generator $faker) {
return [
'vendor' => ,
'name' => $faker->company,
'mac_address' => $faker->macAddress,
];
});

种子

VendorTableSeeder

public function run()
{
factory(App\Vendor::class, 150)->create();
}

DeviceTableSeeder

public function run()
{
factory(App\Device::class, 50)->create();
}

DataSeeder

$this->call(VendorTableSeeder::class);
$this->call(DeviceTableSeeder::class);

我在设备表之前播种供应商表,并希望从现有供应商中随机填充一个供应商 ID。

'vendor' => 'factory::App\Vendor'

但是我得到了

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: foreign key constraint fails

看起来插入正在尝试将 factory::App\Vendor 作为供应商列的字符串插入。我正在尝试弄清楚如何从现有供应商那里获取它。

最佳答案

同时从 VendorTableSeeder 播种它们。

您是否需要没有供应商的设备?还是没有设备的供应商?如果没有,那么这是最好的选择。相关表应一起播种。

更好的例子是学校。学校是主要的种子,对于每所学校,您还可以播种一名校长、几名教师和 100 名学生。如果您一次为它们全部播种,就消除了外键或排序方面的顾虑。

factory(App\Vendor::class, 150)
->create()
->each(function (App\Vendor $vendor) {
$vendor->devices()->save(
factory(App\Device::class)->make()
);

// For some randomness
$vendor->devices()->save(
factory(App\Device::class, rand(0, 4))->make()
);
});

如果您确实希望灵活地分别为它们播种,那么您还有其他几个选择。您可以在设备工厂内部拉取一个随机供应商。

$factory->define(App\Device::class, function(Faker\Generator $faker) {

// Grab a random vendor
$vendor = App\Vendor::orderByRaw('RAND()')->first();

// Or create a new vendor
$vendor = factory(App\Vendor::class)->create();

return [
'vendor_id' => $vendor->id,
'name' => $faker->company,
'mac_address' => $faker->macAddress,
];
});

或者您可以传递与工厂生成的属性合并的额外属性。

// $vendor is a Vendor object

factory(App\Device::class, 50)->create([
'vendor_id' => $vendor->id,
]);

关于laravel-5 - laravel 模型工厂种子从现有生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36051630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com