You need to enable JavaScript to run this app. Laravel 8 调用Ad工厂时出现array_merge参数类型错误的排查
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8 调用Ad工厂时出现array_merge参数类型错误的排查

报错根本原因

该错误是Laravel 8 工厂 API 语法变更导致的参数类型不匹配。
你当前使用的Ad::factory()->create(10)是 Laravel 7 及更早版本的老式调用语法,在 Laravel 8.12 版本的内置工厂实现中,create()方法的第一个参数是需要和工厂默认定义合并的自定义属性数组,不再接收代表生成数量的整型参数。
框架在Factory.php:381位置执行array_merge()合并属性时,拿到你传入的整型值10,因无法将整数作为数组合并,直接抛出类型错误。因为错误发生在框架解析参数、准备调用工厂定义的前置流程中,栈轨迹不会指向你自定义的AdFactory实现文件。

修复方案

按照 Laravel 8 的工厂调用规范,生成指定数量测试数据时,需要将数量参数通过count()链式方法传递,再执行create():

// 错误写法(Laravel 7 及更早版本兼容)
$ads = Ad::factory()->create(10);

// 修正后的 Laravel 8 兼容写法
$ads = Ad::factory()->count(10)->create();

如果需要在生成时覆盖默认属性,才需要给create()方法传入数组参数,例如:

// 生成10条状态为下架的广告测试数据
$ads = Ad::factory()->count(10)->create([
    'status' => 'X'
]);

逻辑校验

可对照 Laravel 8 工厂的源码定义确认匹配关系:

  • count(int $count):专门用于设置要生成的模型实例数量,接收整型参数
  • create(array $attributes = []):用于合并自定义属性,最终生成并持久化模型实例,接收数组参数
    调整后参数类型完全匹配框架要求,可避免array_merge的类型报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 15:06:03