Reputation:
When trying to seed a table, it's showing an 'array to string conversion' error.
This is the output of the error:
[Illuminate\Database\QueryException]
Array to string conversion (SQL: insert into `reviews` (`user_id`, `name`, `location`, `header`, `comments`, `identifier`, `stars`, `privacy`, `actioned`, `appr
oved`, `created_at`) values (10, Bradley Davis, Paulastad, Commodi quas expedita eum., Voluptas magni iusto nemo ea vitae harum quasi., 6c621319-c6ba-41c1-bb0b-696b602470
ef, 5, 1, 0, 1, 2017-03-25 11:44:12))
Table structure:
Schema::create('reviews', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id');
$table->string('name')->nullable();
$table->string('location')->nullable();
$table->string('header')->nullable();
$table->string('comments')->nullable();
$table->uuid('identifier');
$table->integer('stars')->nullable();
$table->boolean('privacy')->default('1');
$table->boolean('actioned')->default('0');
$table->boolean('approved')->default('0');
$table->nullableTimestamps();
});
Seed function:
for ($i = 1; $i < 41; $i++) {
$name = User::where('id', $i + 9)->pluck('name')->all();
$uuid = Uuid::generate(4);
$review = [
'user_id' => $i + 9,
'name' => $name,
'location' => $faker->city,
'header' => $faker->sentence($nbWords = 3, $variableNbWords = true),
'comments' => $faker->text($maxNbChars = 50),
'identifier' => $uuid,
'stars' => [1, 2, 3, 4, 5][rand(0, count([1, 2, 3, 4, 5]) - 1)],
'privacy' => [1, 0][rand(0, count([1, 0]) - 1)],
'actioned' => [1, 0][rand(0, count([1, 0]) - 1)],
'approved' => [0, 1][rand(0, count([0, 1]) - 1)],
'created_at' => Carbon::now()->subWeeks(array_rand([2, 3, 4, 5, 6, 7], 1))
];
}
DB::table('reviews')->insert($review);
print_r($review):
Array
(
[user_id] => 10
[name] => Array
(
[0] => David Robertson
)
[location] => Lake Suzannechester
[header] => Repellendus aut alias exercitationem.
[comments] => Sunt non temporibus pariatur totam aut qui.
[identifier] => Webpatser\Uuid\Uuid Object
(
[bytes:protected] => �a�?�IB��"�mLC�
[hex:protected] =>
[string:protected] => d51961bb-3fcf-4942-a0d9-22a56d4c4392
[urn:protected] =>
[version:protected] =>
[variant:protected] =>
[node:protected] =>
[time:protected] =>
)
[stars] => 4
[privacy] => 1
[actioned] => 1
[approved] => 1
[created_at] => Carbon\Carbon Object
(
[date] => 2017-03-04 12:04:01.225487
[timezone_type] => 3
[timezone] => UTC
)
)
Upvotes: 1
Views: 1542
Reputation: 111829
As you see there are multiple problems here, for example $name
doesn't hold name, but it holds the array, you should use:
$name = User::find($i + 9)->name;
instead.
Similar is for $uuid
- it should return string instead of some object.
Also when I look at this part:
'stars' => [1, 2, 3, 4, 5][rand(0, count([1, 2, 3, 4, 5]) - 1)],
'privacy' => [1, 0][rand(0, count([1, 0]) - 1)],
'actioned' => [1, 0][rand(0, count([1, 0]) - 1)],
'approved' => [0, 1][rand(0, count([0, 1]) - 1)],
'created_at' => Carbon::now()->subWeeks(array_rand([2, 3, 4, 5, 6, 7], 1))
it's far too complicated.
You could use here something like this:
'stars' => rand(1, 5),
'privacy' => rand(0, 1),
'actioned' => rand(0, 1),
'approved' => rand(0, 1),
'created_at' => Carbon::now()->subWeeks(rand(2, 7))->toDateTimeString(),
Also:
DB::table('reviews')->insert($review);
do you use it outside of loop? If so, it does not make much sense, as in each loop run you set it again. However if you do it inside loop, you could also optimized this to not run so many inserts (obviously for 41 records it won't make much difference but for thousands it would do).
Upvotes: 2