Laravel 查询生成器介于两者之间

Posted

技术标签:

【中文标题】Laravel 查询生成器介于两者之间【英文标题】:Laravel Query Builder wherebetween 【发布时间】:2017-04-29 02:57:09 【问题描述】:

我构建了一个搜索表单,它将从数据库中选择标记,其中日期插入到数据选择器中。这很好,但是,当我添加时间时,我得到了错误。

我重建了一个类似的查询:

$datefrom = $request->input('datefrom');
$dateto = $request->input('dateto');
$timefrom = $request->input('timefrom');
$timfrom = $timefrom.':00';
$timeto = $request -> input('timeto');
$timto = $timeto.':00';
$type = $request->input('type');

$maps = Map::select('lat','lng',$type,'temp','humidity','date','time')
                ->where(function($query)
                    $query->whereBetween('date',array($datefrom,$dateto))
                    ->whereBetween('time',array($timfrom,$timto));
                )
                ->get();

当我在搜索表单上输入检查时出现错误:

未定义变量:$datefrom 等

有什么帮助吗?

【问题讨论】:

【参考方案1】:

您必须使用 use 将其传递给函数,例如:

->where(function($query) use ($datefrom)
     $query->whereBetween('date',array($datefrom,$dateto))
           ->whereBetween('time',array($timfrom,$timto));
)

如果你有不止一个,你可以像这样传递它们:

->where(function($query) use ($datefrom,$dateto,$timfrom,$timto)
     $query->whereBetween('date',array($datefrom,$dateto))
           ->whereBetween('time',array($timfrom,$timto));
)

希望这会有所帮助。

【讨论】:

可行,但是 timfrom 必须低于 timto,即使 dateto 大于 datefrom。如何改变它,例如,如果我们得到:从 2016-04-04 15:45 到 2016-04-08 12:12 不确定你的意思@Egzan :( 但我认为这是另一个单独发布的好问题,我认为问题在 OP Undefined variable : $datefrom etc.这篇文章解决了,如果属实,你可以 accept it 并继续发布另一个更详细的描述。祝你好运。

以上是关于Laravel 查询生成器介于两者之间的主要内容,如果未能解决你的问题,请参考以下文章

具有 DATE mysql 功能的 Laravel 查询生成器

加入的 Laravel 查询生成器计数

生成介于开始日期和结束日期之间的日期

您如何有效地生成介于 0 和上限 N 之间的 K 个非重复整数列表 [重复]

使用VBS如何能随机产生一个介于50与100之间的整数?

Laravel 查询构建器 - 查询不工作但在 SQL 控制台中工作