【问题标题】:Laravel Query Builder pass multiple parameters as comma seperated list not workingLaravel 查询生成器将多个参数作为逗号分隔的列表传递不起作用
【发布时间】:2018-10-19 06:58:33
【问题描述】:

我正在使用 spatie/laravel-query-builder 来制作范围过滤器。 在我读到的文档中:

您甚至可以通过传递逗号将多个参数传递给作用域 过滤器的分隔列表:

GET /events?filter[starts_between]=2018-01-01,2018-12-31

所以我在我的模型中创建了一个范围过滤器,如下所示:

public function scopeStartsBetween(Builder $query, $dates): Builder
{
    dd($dates);

    return $query->whereBetween('created_at', array($dates[0], $dates[1]));
}

我的请求如下所示:

http://127.0.0.1:8000/?filter[starts_between]=2018-10-15,2018-10-17

dd($dates) 的结果是这样的:

"2018-10-15"

所以多个参数的逗号分隔列表不起作用,还是我做错了什么?

【问题讨论】:

  • 试试filter[starts_between][]=2018-01-01&filter[starts_between][]=2018-12-31
  • 您能否为该请求显示您的路线?
  • @urfusion 我发现了问题,请查看我的答案 :) 如果可能,请点赞并接受

标签: php laravel-5 laravel-query-builder


【解决方案1】:

类FiltersScope返回...$values

通过链接 Meaning of Three dot (...) in PHP 解释这是什么意思

在模型范围函数中,我们必须使用相同的构造,例如

public function scopeStartsBetween(Builder $query, ...$dates): Builder

【讨论】:

    【解决方案2】:

    问题是多个参数应该作为作用域函数的单独参数处理:

    public function scopeStartsBetween(Builder $query, $from, $to): Builder
    {
        return $query->whereBetween('created_at', array(Carbon::parse($from), Carbon::parse($to)));
    }
    

    这就是诀窍。

    【讨论】:

      猜你喜欢
      • 2016-11-15
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 2016-10-19
      • 2020-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多