【问题标题】:Building function call through a loop通过循环构建函数调用
【发布时间】:2013-07-29 01:59:15
【问题描述】:

我正在尝试为现实网站构建搜索功能。我希望能够一次通过多个参数进行搜索,类似于您在几乎任何零售网站上看到的内容。我在我的项目中使用 Laravel,我希望能够使用查询生成器,这样我就可以使用它内置的分页。

如果我尝试类似:

$listing = DB::select('select * from listings where city = 'Chicago');

我无法对结果进行分页。

另一种方法是这样做:

$listing = DB::table('listings')->where('city', 'Chicago')->get();

但问题是我不知道用户可能会在搜索中输入多少参数。那么我将如何构建一个看起来像这样的函数调用:

$listing = DB::table('listings')->where('city', 'Chicago')->where('askingPrice', '>', 50000)->where('bedrooms', '>', 3)->get();

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

    假设你有这个参数:

    <?php
    $parameters = array(
        'one' => 'a',
        'two' => 'b',
        'three' => 'c'
    );
    

    创建对象:

    <?php
    $listing = DB::table('listings');
    

    然后,循环:

    <?php
    foreach ($parameters as $key => $value) {
        $listing = $listing->where($key, $value);
    }
    

    当然你必须改进它以处理&gt; 和其他人。但我想你明白了,对吧?

    最后:

    <?php
    $listing = $listing->get();
    

    【讨论】:

    • 这是多次查询数据库还是仅在使用 get() 时才查询?
    • 仅当使用get() 时。 where() 返回 \Illuminate\Database\Query\Builder 未执行查询。
    • 当我这样做时,我无法分页。我以为我可以用$listing-&gt;paginate(20); 替换$listing-&gt;get();
    • 不确定我之前做了什么,但我现在正在获取分页链接。
    猜你喜欢
    • 1970-01-01
    • 2019-07-20
    • 2015-10-18
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    相关资源
    最近更新 更多