niloofar
niloofar

Reputation: 2334

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

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()

Upvotes: 0

Views: 83

Answers (1)

Ohgodwhy
Ohgodwhy

Reputation: 50798

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)

Upvotes: 1

Related Questions