【问题标题】:Searching and filtering / refining database results in Laravel 4在 Laravel 4 中搜索和过滤/优化数据库结果
【发布时间】:2013-11-18 18:44:29
【问题描述】:

我正在寻找一种通过 Laravel 4 中的查询字符串来搜索和过滤数据库表/Eloquent 模型的方法。

我有一个名为houses 的表,其中的列名为:pricenamehasCoffeeMachinehasStove

我希望用户能够执行以下操作:http://example.com?name=test&hasCoffeeMachine=1

这将获取名称为“test”的所有行并且他们有一台咖啡机。

我希望用户能够根据他们想要的过滤器添加 URL 参数。考虑所有可能的查询字符串组合以从表中返回正确结果的最佳方法是什么?

【问题讨论】:

    标签: php mysql laravel laravel-4


    【解决方案1】:
    $houses = new House;
    
    if(Input::get('name'))
        $houses->where('name', '=', Input::get('name'));
    
    if(Input::get('hasCoffeeMachine'))
        $houses->where('hasCoffeeMachine', '=', Input::get('hasCoffeeMachine'));
    
    // Keep adding more for every filter you have
    
    // Don't do this till you are done adding filters.
    $houses = $houses->get();
    

    【讨论】:

    • 这对 Laravel 4 有效吗?它不适合我!
    • 也许可以试试if (condition) ... $houses = $houses->where('column', '=', 'value')
    • 这个解决方案在 laravel 4.2 中仍然有效
    • 如果hasCoffeeMachine = 0这将不起作用,如果你使用Input::has('name')会更好
    • 正如@dynamic 所说,从 Eloquent 创建对象时您似乎无法做到这一点,您必须这样做$houses = DB::table('house'); 然后循环似乎工作
    【解决方案2】:

    或者,您可以构建一个数组并将其传递到 where 子句 https://laravel.com/docs/5.2/queries#where-clauses

    $houses = $houses->where([
        ['hasCoffeeMachine',1],
        ['price','<','1000'],
    ])->get();
    

    您可以使用任何条件语句构建数组。

    【讨论】:

      猜你喜欢
      • 2011-10-12
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 2021-06-06
      • 2017-11-05
      • 2015-07-20
      • 2014-11-28
      • 1970-01-01
      相关资源
      最近更新 更多