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

Laravel使用Astrotomic多语言包时工厂启动报错:Array to string conversion

解决Astrotomic Laravel Translatable工厂数组转字符串错误

你的错误根源是直接将多语言翻译数组合并到主模型属性数组中,而Astrotomic Translatable的多语言字段存储在单独的翻译表中,主表并不存在uk、ru这类字段,Laravel尝试插入这些不存在的字段时,会把数组值当成字符串处理,触发数组转字符串的异常。

修改后的工厂代码

use Illuminate\Database\Eloquent\Factories\Factory;

class YourModelFactory extends Factory
{
    protected $model = YourModel::class; // 替换成你的实际模型类

    public function definition(): array
    {
        // 仅返回主模型表的字段
        return [
            'city_id' => City::inRandomOrder()->first()->id,
            'degree' => fake()->numberBetween(1, 2),
            'qualification' => fake()->numberBetween(1, 3),
            'start_year' => fake()->year(),
            'viewed' => fake()->numberBetween(50, 5500),
            'status' => true,
            'image' => fake()->imageUrl(250, 250),
            'sort_order' => fake()->numberBetween(0, 10),
            'created_at' => fake()->dateTimeBetween('-4 week', '-3 week'),
            'updated_at' => fake()->dateTimeBetween('-2 week', '-1 week'),
        ];
    }

    public function configure()
    {
        // 通过afterCreating回调设置多语言翻译
        return $this->afterCreating(function ($model) {
            $locales = ['uk', 'ru'];

            foreach ($locales as $locale) {
                // 为对应语言创建或更新翻译记录
                $model->translateOrNew($locale)->fill([
                    'slug' => fake()->unique()->randomNumber(4) . '-' . fake()->slug(3),
                    'name' => fake()->unique()->name(),
                    'description' => fake()->text(),
                    'education' => fake()->text(),
                ])->save();
            }
        });
    }
}

关键说明

  1. 字段分离处理:主工厂只负责主表字段的生成,多语言字段通过回调单独插入到翻译表,避免主表字段不匹配的问题。
  2. translateOrNew方法:自动判断对应语言的翻译是否存在,不存在则创建新记录,无需手动处理重复逻辑。
  3. 性能优化:将City::get()->random()->id改为City::inRandomOrder()->first()->id,避免加载全量城市数据,提升查询效率。

内容的提问来源于stack exchange,提问作者Денис Линник

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:35:07