对于我的数据库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行。
答案 0 :(得分:1)
当前,您正在查询构建器实例上调用 df = df[df['customer_id'].isin(df22['customer_id'])]
而不是查询结果(这将是一个集合)。查询构建器上的each
用于对结果进行分块,这将忽略您之前可能设置的任何限制。
首先,要获取可以使用的代码,可以将结果分配给变量,然后在该变量上调用each()
。
each()
但是,我实际上建议您使用map()和join()而不是each():
$results = $sqls->orderBy('age', 'asc')->limit(50)->get();
$results->each(...);
仅供参考,Laravel还具有when()方法,可以节省编写多个if语句的麻烦,从而使整个查询看起来像这样:
$results = $sqls->orderBy('id', 'asc')->limit(10)->get();
$return = $results->map(function ($item) {
return "<td> {$item->id} </td>";
})->join('');
答案 1 :(得分:-1)
我认为这对您有帮助
if($request->input('var')) {
$var = $request->var;
$cond1 = DB::table('table')->select('...')->where('foo','>',$var)-
>orderBy()->limit()->get();
// more if
}