这是我的桌子

| 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上显示所有没有选择选项的“水果”?

最佳答案

如果设置了变量,则只能使用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语句。

10-08 04:02