'Laravel You requested 1 items, but there are only 0 items available

I am getting row's column randomly to seed database, using eloquent :

$physician = SelectOption::where('select_option_group_id', 1)->pluck('name')->random();

it works if data exists in select_options table. But if it does not exists, it gives an error :

You requested 1 items, but there are only 0 items available.

I want to leave it empty, if it's empty.



Solution 1:[1]

Check if collection is not empty prior doing random():

$collection = SelectOption::where('select_option_group_id', 1)->pluck('name');
if (!$collection->isEmpty()) {
    $physician = $collection->random();
} else {
    ...
}

Solution 2:[2]

Use inRandomOrder() instead:

$physician = SelectOption::where('select_option_group_id', 1)->inRandomOrder()->first();
$name = is_null($physician) ? 'No data available' : $physician->name;

Solution 3:[3]

Check the order of your seeder or the date of your migration file. The migrations file is executing by date ex: 20220429_16_43_02_create_order_table.php. So, if you have 20220416_.... after 20220429_.... that throw the exception.

Solution: Change (rename) the date of the file.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2
Solution 3