如何修复工厂中带有消息textfaker段落或文本的错误?

问题描述 投票:0回答:1

在 laravel/livewire 网站上,我使用 faker 段落方法使用消息文本制作工厂:

$faker = \Faker\Factory::create();
return [
    'user_id' => $this->faker->randomElement(User::all()->select('id'))['id'],
    'message' => 'message text ' . $this->faker->paragraphs(rand(1, 3), true),
    'created_at' => $faker->dateTimeBetween('-1 month', '-1 minute'),
];

我在数据库中得到了我需要的数据。 但我需要随机获取段落或一些文本

$faker = \Faker\Factory::create();
return [
    'user_id' => $this->faker->randomElement(User::all()->select('id'))['id'],
    'message' =>  'message text ' . (rand(1, 4) === 1 ? $this->faker->paragraphs(rand(1, 2)) : $this->faker->text(40)),
    'created_at' => $faker->dateTimeBetween('-1 month', '-1 minute'),
];

我遇到错误:

   Illuminate\Database\QueryException

  Array to string conversion (Connection: mysql, SQL: insert into `messages` (`user_id`, `message`, `created_at`, `updated_at`) values (2, ?, 2024-05-01 06:03:39, 2024-05-07 09:18:10))

  at vendor/laravel/framework/src/Illuminate/Database/Connection.php:829
    825▕                     $this->getName(), $query, $this->prepareBindings($bindings), $e
    826▕                 );
    827▕             }
    828▕
  ➜ 829▕             throw new QueryException(
    830▕                 $this->getName(), $query, $this->prepareBindings($bindings), $e
    831▕             );
    832▕         }
    833▕     }

      +17 vendor frames

  18  database/seeders/messages.php:16
      Illuminate\Database\Eloquent\Factories\Factory::create()
      +22 vendor frames

  41  artisan:35
      Illuminate\Foundation\Console\Ker

哪种有效方法可以修复它?

"laravel/framework": "^10.48.4",
"fakerphp/faker": "^1.23.1",

提前致谢!

laravel laravel-factory
1个回答
0
投票

根据Faker文档

paragraphs
方法有第二个参数,默认情况下
echo $faker->paragraphs(2);
给出一个段落数组,如果你想要作为文本,你必须传递
true
作为第二个参数:

@method array|string paragraphs($nb = 3, $asText = false)

用法如下:

echo $faker->paragraphs(2);

// [
//     'Quasi nihil nisi enim omnis natus eum. Autem sed ea a maxime. Qui eaque doloribus sit et ab repellat. Aspernatur est rem ut.',
//     'Corrupti quibusdam qui et excepturi. Fugiat minima soluta quae sunt. Aperiam adipisci quas minus eius.'
// ]

echo $faker->paragraphs(2, true);

// Quia odit et quia ab. Eos officia dolor aut quia et sed. Quis sint amet aut. Eius enim sint praesentium error quo sed eligendi. Quo id sint et amet dolorem rem maiores.
//
// Fuga atque velit consectetur id fugit eum. Cupiditate aut itaque dolores praesentium. Eius sunt ut ut ipsam.

作为注释,您可以使用

fake
辅助方法,无需手动创建实例:

return [
    'user_id' => fake()->randomElement(User::all()->select('id'))['id'],
    'message' =>  'message text ' . (rand(1, 4) === 1 ? fake()->paragraphs(rand(1, 2), true) : fake()->text(40)),
    'created_at' => $faker->dateTimeBetween('-1 month', '-1 minute'),
];
© www.soinside.com 2019 - 2024. All rights reserved.