Php 使用空输入选择Laravel查询生成器

Php 使用空输入选择Laravel查询生成器,php,mysql,sql,laravel,Php,Mysql,Sql,Laravel,我正在用Laravel5.0建立一个可过滤列表,我遇到了以下问题 我从HTML表单获取过滤器参数并将其传递给查询生成器,但是如果表单输入保持为空,则应返回由其他过滤器过滤的表的所有行 示例代码: $collection = Model::withTrashed() ->where('attr1', 'LIKE', \Request::input('attr1', '%')) ->where('attr2', 'LIKE', \Request::input('attr2

我正在用Laravel5.0建立一个可过滤列表,我遇到了以下问题

我从HTML表单获取过滤器参数并将其传递给查询生成器,但是如果表单输入保持为空,则应返回由其他过滤器过滤的表的所有行

示例代码:

$collection = Model::withTrashed()
    ->where('attr1', 'LIKE', \Request::input('attr1', '%'))
    ->where('attr2', 'LIKE', \Request::input('attr2', '%'))
    ->where('attr3', 'LIKE', \Request::input('attr3', '%'))
    ->get();
对我来说,这似乎是最正确的代码,但它并没有像预期的那样工作。你知道解决我问题的好办法吗?我不想集成一个混乱的switch/case语句来证明存在并手动构建集合:(


谢谢您的帮助。

您需要对查询进行如下调整:

$collection=Model::withTrashed()
->其中('attr1'、'LIKE'、'%'。\Request::input('attr1').'%。)
->其中('attr2'、'LIKE'、'%'。\Request::input('attr2').'%。)
->其中('attr3'、'LIKE'、'%'。\Request::input('attr3').'%。)
->get();


这将确保发送空输入参数时,
LIKE
子句仍然正确。

您的问题似乎是总是将筛选器传递给查询,只有在筛选器不为空时才应传递它们

也许像这样的东西对你有用:

$results = Model::withTrashed();
if (\Request::input('attr1')) {
    $results->where('attr1', 'LIKE', \Request::input('attr1', '%'));
}
if (\Request::input('attr2')) {
    $results->where('attr2', 'LIKE', \Request::input('attr2', '%'))
}
if (\Request::input('attr3')) {
    $results->where('attr3', 'LIKE', \Request::input('attr3', '%'))
}
$collection = $results->get();

但当我在attr1输入中输入1时,它不是返回attr1==11的模型吗?是的,它会返回,因为这是使用
LIKE
的目标。如果您不想这样做,那么您不应该使用
LIKE
,而是使用
where('attr1',\Request::input('attr1'))
。在这种情况下,您需要一个if语句来检查请求中是否存在
attr1
。但是,如果在attr1输入中未选择任何内容,则它只返回attr1==空的行。:dindect,这就是为什么我提到您需要检查输入中是否存在
attr1
参数的原因。是的,我想您是对的。Than谢谢你的帮助!:)我想我必须这样使用它谢谢