代码之家  ›  专栏  ›  技术社区  ›  user3479267

两个数字之间的拉威尔搜索

  •  -1
  • user3479267  · 技术社区  · 7 年前

    我目前在搜索控制器中具有以下功能。我还想检索空间价格在用户最小输入和最大输入之间的结果。如果用户没有输入最小值或最大值,或者如果用户输入最大值但没有最小值,我还希望查询能够工作,它将返回介于0和最大值之间的结果。

    $town = $_GET['town'];
    $category = $_GET['category'];
    $min = $_GET['min'];
    $max = $_GET['max'];
    
    $spaces = \App\Space::where([ 
        ['space_town', 'LIKE', '%' . $town . '%'],
        ['space_category', 'LIKE', '%' . $category . '%'],
    ])->get();
    
    return view('search', compact('spaces'));
    

    提前感谢,,

    6 回复  |  直到 7 年前
        1
  •  2
  •   Abdoon Nur    7 年前

    最好的方法是使用PHP条件检查是否给定了最大值和最小值。最后的代码如下所示:

    $town = $_GET['town'];
    $category = $_GET['category'];
    $min = empty($request->input('min')) ? 0 : $request->input('min');
    $max = empty($request->input('max')) ? 0 : $request->input('max');
    
    $query = \App\Space::where([ 
    ['space_town', 'LIKE', '%' . $town . '%'],
    ['space_category', 'LIKE', '%' . $category . '%'],]);
    
    // check if any of max or min value is given
    
    if($min!=0 || $max!=0 ){
     $query = $query->whereBetween('space_price', array($min, $max)); 
    }
    
    $spaces = $query->get(); 
    
    return view('search', compact('spaces'));
    
        2
  •  1
  •   René Höhle oasisfleeting    7 年前

    因此,首先,当您使用Laravel时,不要直接使用GET参数,而是通过框架调用它们。

    $min = $request->input('min');
    

    因此,出于安全原因,您不会与框架抗争,也不会使用该函数。

    因此,当您需要一个默认值时,可以使用速记运算符或if语句定义一个值。

    与您的查询一起使用 > <

        3
  •  0
  •   H45H    7 年前

    也许你需要像这样的东西 其中() .

    $spaces = \App\Space::where(['space_town', 'LIKE', '%' . $town . '%'],
        ->whereBetween('price', [$min_price, $max_price])
        ->get();
    

    在任何情况下,您都将发送 min_price max_price 如果用户未选择任何值,则无论如何都将发布默认值。因此,它获取该值内的结果。

        4
  •  0
  •   Abhijit Nandi    7 年前

    从价格介于10和20之间的产品中选择*

        5
  •  0
  •   marc_s MisterSmith    7 年前

    如果您使用的是Laravel 5.7.19 更高

    默认情况下,laravel附带名为 whereBetween

    它将用于收集

    https://laravel-news.com/laravel-5-7-19

    $c = new Collection([
        ['v' => 1], 
        ['v' => 2], 
        ['v' => 3], 
        ['v' => '3'], 
        ['v' => 4]
    ]);
    
    $this->assertEquals(
        [
            ['v' => 2],
            ['v' => 3],
            ['v' => '3'],
            ['v' => 4]
        ],
        $c->whereBetween('v', [2, 4])->values()->all()
    );
    

    全文敬请查收 [ https://laravel-news.com/laravel-5-7-19][ClickHere]

    推荐文章