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
相关产品推荐
相关产品推荐

