这是我的桌子
| id|lvl1_name |lvl2_name|lvl3_name |value
| 1 |Fruit |Apple | USA |20
| 2 |Fruit |Apple | England |30
| 3 |Fruit |Manggo | USA |45
| 4 |Fruit |Manggo | England |15
| 5 |vegetable |Spinach | USA |20
| 6 |vegetable |Spinach | England |30
这是我的控制者:
$parameters_id = Fruits::where('lvl1_name', $request->lvl1)
->where('lvl2_name', $lvl2)
->select('id')->pluck('id');
如果我的要求:
$request->lvl1 = "Fruit"
和$request->lvl2 = "Apple"
将显示所有苹果
我的问题是
如果我的要求
$request->lvl1 = "Fruit"
和$request->lvl2 = null
如何在lvl2
上显示所有没有选择选项的“水果”?
答案 0 :(得分:2)
如果设置了变量,则可以使用when
仅运行where
语句。
$parameters_id = Fruits::where('lvl1_name', $request->lvl1)
->when($lvl2, function($query, $lvl2) {
$query->where('lvl2_name', $lvl2);
})
->select('id')->pluck('id');
它在https://laravel.com/docs/5.6/queries#conditional-clauses下可用
有时,您可能希望子句仅在其他情况为真时才应用于查询。例如,如果传入请求中存在给定的输入值,则您可能只想应用where语句。