gpt4 book ai didi

php - 如何使用 Faker 在 Laravel 中播种多个关系

转载 作者:行者123 更新时间:2023-12-05 08:41:28 35 4
gpt4 key购买 nike

我有一个包含两列的数据库,品牌和商店。每个品牌都可以欠多家商店,我想使用 Laravel 通过 Fakers 为我的数据库播种。

所以在模型中设置迁移和关系之后

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Brand extends Model
{

/**
* Get the shops for the brand.
*/
public function shops()
{
return $this->hasMany('App\Shop','sh_brand_id');
}
}

和:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Shop extends Model
{
public function user() {
return $this->belongsTo('App\Brand','sh_brand_id');
}
}

我想使用工厂来为数据库做种。

<?php

use Faker\Generator as Faker;

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

return [
'name' => $faker->company,
'address' => $faker->address,
];
});

use Faker\Generator as Faker;

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

return [
'name' => $faker->company,
'logo_url' => $faker->imageUrl(640, 480),
'website' => $faker->url,
'description' => $faker->text(500),
'telephone_number' =>'31'. $faker->randomNumber(8),
'principal_address' => $faker->address,
'email' => $faker->unique()->safeEmail,
];
});

最后,我需要使用这些工厂为数据库播种。网站上有文档和许多示例,但我找到的每个解决方案都让我为每个品牌只生成一个商店,而我想为每个品牌生成许多商店。

执行此操作的最佳方法是什么?

最佳答案

直接放在你的工厂里。我使用辅助方法 getInstanceOf 来选择另一个模型的随机实例。

use Faker\Generator as Faker;
use App\Brand;
use App\Shop;

function getInstanceOf($class, $returnIdOnly = true) {
$instance = $class::inRandomOrder()->first() ?? factory($class)->create();
return $returnIdOnly ? $instance->id : $instance;
}

$factory->define(Shop::class, function (Faker $faker) {
return [
'name' => $faker->company,
'address' => $faker->address,
'sh_brand_id' => getInstanceOf(Brand::class)
];
});

然后在播种时,

factory(App\Brand::class, 10);
factory(App\Shop::class, 50);

关于php - 如何使用 Faker 在 Laravel 中播种多个关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49584272/

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