Laravel 8:如何在Seeder文件的for循环中使用if-else条件
问题解决:Laravel Seeder中根据循环变量设置room_type的语法错误
你的代码报错是因为在数组赋值的表达式中直接使用了普通if语句,PHP不允许这么写,同时代码里还有一个多余的},这两个都是语法错误。
修正方法一:使用三元运算符(适合简单逻辑)
把if语句换成PHP支持的三元运算符写法,同时删掉多余的}:
<?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" => $i == 4 ? 'single_bed' : ($i == 9 ? 'twin_bed' : 'third_bed'), "status" => 0 ]); } } }
修正方法二:提前计算room_type值(逻辑复杂时更易读)
如果后续逻辑变复杂,提前把room_type的值计算好再传入数组,代码可读性更好:
<?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++) { // 先根据$i确定room_type if($i == 4) { $roomType = 'single_bed'; } elseif($i == 9) { $roomType = 'twin_bed'; } else { $roomType = 'third_bed'; } \App\Models\Room::create([ "room_type" => $roomType, "status" => 0 ]); } } }
错误说明
ParseError: unexpected token "if":PHP的表达式上下文(比如数组元素赋值)只能用表达式,普通if是流程控制语句,不属于表达式,所以报错。三元运算符是表达式,可以直接用在这里。- 代码里第20行的
}是多余的,破坏了数组的结构,必须删除。
内容的提问来源于stack exchange,提问作者niloofar
相关产品推荐
相关产品推荐

