I try to do seeding on a pivot table. Here is my code
public function run()
{
// Get array of ids
$teacherIds = DB::table('teachers')->pluck('id');
$courseIds = DB::table('courses')->pluck('id');
// Seed course_teacher table
foreach ((range(1, 1)) as $index)
{
DB::table('course_teacher')->insert(
[
'teacher_id' => $teacherIds[array_rand( (array) $teacherIds)],
'course_id' => $courseIds[array_rand( (array) $courseIds)]
]
);
}
}
I added (array) because I had an error that I was giving an object while it wanted an array.
But since I have another error undefined index:
Can you help me ? Thank you very much
To make sure you get an array when getting $teacherIds
and $courseIds
, add the toArray
function to make sure you are getting an array and not a Collection object.
// Get array of ids
$teacherIds = DB::table('teachers')->pluck('id')->toArray();
$courseIds = DB::table('courses')->pluck('id')->toArray();
By doing this, you don't need to cast the array in the array_rand
function either.
Update:
Even better would be to use the random
function. This function will choose a random element for you.
$teacherIds = DB::table('teachers')->pluck('id');
$courseIds = DB::table('courses')->pluck('id');
DB::table('course_teacher')->insert(
[
'teacher_id' => $teacherIds->random(),
'course_id' => $courseIds->random()
]
);