Laravel:播种数据库时出错(数组转换为字符串)

时间:2017-05-28 03:29:51

标签: php laravel laravel-5 laravel-5.4 laravel-seeding

我正在尝试播种数据库。在User示例之后,我创建了一个Emploi(Job)播种器,但是我遇到了错误。

播种文件

$factory->define(App\Emploi::class, function (Faker\Generator $faker) {

    return [
        'JOBURL' => $faker->name,
        'SALARYMAX' => '$50,000',
        'SALARYMIN' => '$40,000',
        'SALARYTYPE' => 'annual',
        'NAME' => $faker->words(5),
        'POSITION' => $faker->words(4),
        'JOBREF' => str_random(10),
        'JOB_SUMMARY' => $faker->text,
        'tweeted' => false,
        'POSTDATE' => $faker->dateTime(),
        'EXPIRYDATE' => $faker->dateTime(),
        'slug' => str_random(10),
    ];
});

例外

[ErrorException]
  Array to string conversion

输出

 [Illuminate\Database\QueryException]
  Array to string conversion 
  (SQL: insert into `emplois` 

  (`JOBURL`, `SALARYMAX`, 
  `SALARYMIN`, `SALARYTYPE`, `NAME`, `POSITION`, 
  `JOBREF`, 
  `JOB_SUMMARY`, 
  `tweeted`, `
  POSTDATE`, `EXPIRYDATE`, `slug`, 
  `updated_at`, `created_at`) 
  values 
  (Lawson Boyer II, $50,000,
  $40,000, annual, rerum, voluptates, 
  LCw8d67S8w, 
  Nulla qui corporis sequi. 
  Eum nostrum culpa ut culpa velit. 
  Molestiae cumque doloremque et ex., 
  0, 
  1972-11-09 12:00:07, 1997-10-04 09:08:17, 6FxxCHFus6,
  2017-05-28 03:18:52, 2017-05-2  8 03:18:52)

  )

databaseSeeder

factory(App\Emploi::class, 50)->create();

2 个答案:

答案 0 :(得分:2)

尝试implode('',$faker->words(5))而非$faker->words(5),因为laravel期望您的值为数字或字符串类型。

答案 1 :(得分:2)

Faker库有一些方法可以返回array而不是string。 laravel在这里期待的是一个字符串。因此,您可以使用PHP的implode函数创建字符串,也可以替换$faker->words()的整个$faker->sentence()方法。这是方法签名:

sentence($nbWords = 6, $variableNbWords = true)

干杯!