Laravel 工厂并选择了一个唯一的 belongsTo 实例
Laravel factory and selected a unique belongsTo instance
我有一段 hasOne
关系,因为 Campaign
hasOne
Product
Product
belongsTo
Campaign
.
在这种特殊情况下,在 products
数据库 table 中,应该只有一个对 campaign
的唯一引用。我将数据库端的约束设置为 unique
。我的问题是,在定义工厂时,我如何确保它选择一个之前由播种者创建的独特活动?
class ProductFactory extends Factory
{
protected $model = Product::class;
public function definition()
{
return [
//
'name' => $this->faker->sentence,
'description' => $this->faker->paragraph,
'campaign_id' => Campaign::inRandomOrder()->first()->id, # this won't work
];
}
很明显为什么 Campaign::inRandomOrder()->first()->id
不起作用。我不一定想在这里使用 Campaign 工厂来创建新的 Campaign,因为每个实例的创建方式有很多细微差别,我已经在我的 CampaignSeeder
中处理了这一点
我感兴趣的是将创建的每个产品与我播种时尚未声明的 Campaign
相关联。解决此问题的最佳方法是什么?
假设您在广告系列模型
中有关系产品
class ProductFactory extends Factory
{
protected $model = Product::class;
public function definition()
{
return [
//
'name' => $this->faker->sentence,
'description' => $this->faker->paragraph,
'campaign_id' => Campaign::doesntHave('product')->first()->id,
];
}
每次它都会在您的 table 中获得第一个没有产品的广告系列
我有一段 hasOne
关系,因为 Campaign
hasOne
Product
Product
belongsTo
Campaign
.
在这种特殊情况下,在 products
数据库 table 中,应该只有一个对 campaign
的唯一引用。我将数据库端的约束设置为 unique
。我的问题是,在定义工厂时,我如何确保它选择一个之前由播种者创建的独特活动?
class ProductFactory extends Factory
{
protected $model = Product::class;
public function definition()
{
return [
//
'name' => $this->faker->sentence,
'description' => $this->faker->paragraph,
'campaign_id' => Campaign::inRandomOrder()->first()->id, # this won't work
];
}
很明显为什么 Campaign::inRandomOrder()->first()->id
不起作用。我不一定想在这里使用 Campaign 工厂来创建新的 Campaign,因为每个实例的创建方式有很多细微差别,我已经在我的 CampaignSeeder
我感兴趣的是将创建的每个产品与我播种时尚未声明的 Campaign
相关联。解决此问题的最佳方法是什么?
假设您在广告系列模型
中有关系产品class ProductFactory extends Factory
{
protected $model = Product::class;
public function definition()
{
return [
//
'name' => $this->faker->sentence,
'description' => $this->faker->paragraph,
'campaign_id' => Campaign::doesntHave('product')->first()->id,
];
}
每次它都会在您的 table 中获得第一个没有产品的广告系列