为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 查询生成器中的条件 WHERE 语句不适用于 LIMIT

Laravel 查询生成器中的条件 WHERE 语句不适用于 LIMIT

PHP
收到一只叮咚 2022-07-09 09:39:29
对于我的数据库table,虽然下面的代码工作正常:$sql = DB::table('table')->select('id')->orderBy('id', 'asc')->limit(50)->get();有 50 行,这不会:$sql = DB::table('table')->select('id');$sql->orderBy('id', 'asc')->limit('50')->get();因为它确实返回了正确的行,但它返回了数据库本身中的所有行。我需要能够将它分开,因为我打算在两者之间使用 if 语句来WHERE根据用户输入添加子句,如下所示(编辑:添加的代码类似于实际代码):$foo = $request->input('foo');$bar = $request->input('bar');$sqls = DB::table('foobar')->select('id', 'name', 'age', 'zip_code');if($foo === "foo") $sqls->where('age', '<', 31);if($bar === "bor") $sqls->where('zip_code', '>', '12345');$sqls->orderBy('age', 'asc')->limit(50)->get();$return = '';$sqls->each(function($sql) use (&$return){     $return .= "<td> {$sql->id} </td>"}返回所有行而不是限制为 50 行。
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

目前,您调用each的是查询构建器实例,而不是查询的结果(这将是一个集合)。each()在查询生成器上用于分块结果,这将忽略您之前设置的任何限制。


首先,要获取您正在工作的代码,您可以将结果分配给一个变量,然后调用each()它。


$results = $sqls->orderBy('age', 'asc')->limit(50)->get();


$results->each(...); 

但是,我实际上建议您使用map()和join()而不是each():


$results = $sqls->orderBy('id', 'asc')->limit(10)->get();


$return = $results->map(function ($item) {

    return  "<td> {$item->id} </td>";

})->join('');

仅供参考,Laravel 也有一个when()方法来省去你编写多个 if 语句的麻烦,所以你的整个查询看起来像:


$results = DB::table('foobar')

    ->select('id', 'name', 'age', 'zip_code')

    ->when($request->input('foo') === 'foo', function ($query) {

        $query->where('age', '<', 31);

    })

    ->when($request->input('bar') === 'bar', function ($query) {

        $query->where('zip_code', '>', '12345');

    })

    ->orderBy('age', 'asc')

    ->limit(50)

    ->get();


$return = $results->map(function ($item) {

    return  "<td> {$item->id} </td>";

})->join('');


查看完整回答
反对 回复 2022-07-09
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

我想这会对你有所帮助


if($request->input('var')) {

   $var = $request->var;

   $cond1 = DB::table('table')->select('...')->where('foo','>',$var)- 

             >orderBy()->limit()->get();

 // more if 

}


查看完整回答
反对 回复 2022-07-09
  • 2 回答
  • 0 关注
  • 176 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信