Laravel 8 - How to use if else condition inside for loop in seeder file?

51 Views Asked by At

I'm new to Laravel. I've made a seeder file, and there is a for loop in it. I want to set the room_type based on the $i value, but it does not work.

This is the seeder file:

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class RoomTableSeeder extends Seeder
{
    public function run(): void
    {
        for($i=0;$i<15;$i++) {

            \App\Models\Room::create([
                "room_type" =>
                    if($i == 4){"single_bed"}elseif($i == 9){"twin_bed"}else{"third_bed"}, //It doesn't work.
                }
                "status"    =>  0]);
        }   
    }
}

This is the error I get:

   ParseError 

  syntax error, unexpected token "if"

  at database/seeders/RoomTableSeeder.php:19
     15▕         for($i=0;$i<15;$i++) {
     16▕ 
     17▕             \App\Models\Room::create([
     18▕                 "room_type" =>
  ➜  19▕                     if($i == 4){"single_bed"}elseif($i == 9){"twin_bed"}else{"third_bed"},
     20▕                 }
     21▕                 "status"    =>  0]);
     22▕         }   
     23▕     }

      +1 vendor frames 

  2   [internal]:0
      Composer\Autoload\ClassLoader::loadClass()
      +7 vendor frames 

  10  database/seeders/DatabaseSeeder.php:15
      Illuminate\Database\Seeder::call()
1

There are 1 best solutions below

1
Ohgodwhy On

If you really want to go this way, you can use an immediately invokeable function as the expression value.

I've used match here as opposed to several if statements for readability.

"room_type" => (function ($i) {
   return match ($i) {
       4 => "single_bed",
       9 => "twin_bed"
       default => "third_bed"
   }
})($i)