You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel多列关联Factory问题:为每个Card生成独立Order

解决方案

问题出在当前的sold状态实现中,调用sold()方法时就提前创建了单个Order实例,后续所有Card都复用这个实例的ID和ref。要让每个Card对应独立的Order,需要把创建Order的逻辑移到状态回调内部,这样每生成一个Card都会触发一次Order的创建。

修改CardFactory中的sold方法:

public function sold(int $userId) : Factory
{
    return $this->state(function (array $attributes) use ($userId) {
        // 每个Card生成时,创建新的Order实例
        $createdOrder = Order::factory()->forUser($userId)->create();
        
        return [
            'state' => Card::STATE_SOLD,
            'sold' => Carbon::now()->subDay(),
            'addedincart' => Carbon::now()->subDay()->subHour(),
            'selling_date' => Carbon::now()->subDay(),
            'order_id' => $createdOrder->id,
            'order_ref' => $createdOrder->ref,
        ];
    });
}

原理说明

  • 原写法:调用Card::factory()->sold($user->id)时就创建了一个Order,后续count(15)生成的所有Card都使用这个固定的Order。
  • 修改后:状态回调函数会在每个Card实例生成时单独执行,每次执行都会创建一个新的Order,确保每个Card对应唯一的Order记录。

内容的提问来源于stack exchange,提问作者gizon_dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 06:36:12