Laravel 9 Seeder报错:TypeError array_merge()参数#2需为数组,传入整数
错误原因与修复方案
问题1:工厂类调用方式错误
你在OrderSeeder.php里错误地使用Order::factory()创建OrderItem实例。Laravel中每个模型对应专属工厂类,Order::factory()的第一个参数是创建数量(int类型),但你传入了OrderItem::class,导致Laravel将类名解析为无效参数,内部执行array_merge时触发类型错误。
修复后的OrderSeeder.php:
public function run() { Order::factory()->count(30)->create() ->each(function (Order $order) { // 改用OrderItem专属工厂类创建数据 OrderItem::factory(random_int(1, 5))->create([ 'order_id' => $order->id, ]); }); }
问题2:Faker方法参数错误
OrderItemFactory.php中price字段使用的numberBetween()方法需要传入两个整数参数(最小值和最大值),但你写的10.100是单个浮点数,导致方法调用失败。
如果需要整数价格,修复后的OrderItemFactory.php:
public function definition() { return [ 'product_title' => $this->faker->text(30), 'price' => $this->faker->numberBetween(10, 100), // 修正为两个整数参数 'quantity' => $this->faker->numberBetween(1, 5), ]; }
如果需要带小数的价格(例如保留两位小数),改用randomFloat()方法:
public function definition() { return [ 'product_title' => $this->faker->text(30), 'price' => $this->faker->randomFloat(2, 10, 100), // 生成10-100之间、保留两位小数的价格 'quantity' => $this->faker->numberBetween(1, 5), ]; }
内容的提问来源于stack exchange,提问作者Mustafa Bayram
相关产品推荐
相关产品推荐

