对于我的数据库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行。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从你的描述来看,你正在使用 Laravel 的 Eloquent ORM 或 Query Builder 来构建数据库查询。在你的第二个示例中,问题可能出在链式调用的处理上。当你分开写时,确保每个部分都正确地引用了上一步的结果。根据你的需求,正确的做法应该是持续链式调用,即使你需要在其中插入条件语句。这里是一个修正后的示例:
use Illuminate\Http\Request;
// ...
$foo = $request->input('foo');
$bar = $request->input('bar');
$sqls = DB::table('foobar')
->select('id', 'name', 'age', 'zip_code');
if ($foo === "foo") {
$sqls->where('age', '=', 'some_value'); // 确保你的 where 子句是完整的,这里我假设了一个示例值 'some_value'
}
if (!empty($bar)) { // 假设你想基于 $bar 添加另一个条件
$sqls->where('zip_code', '>', '12345');
}
$return = $sqls->orderBy('age', 'asc')
->limit(50)
->get();
// 然后你可以遍历 $return 来处理结果
$return->each(function($item) {
// 处理每一项,例如:
// $return .= $item->name . '<br>';
});
注意点: 1. 在 where
函数中,确保提供了完整的条件表达式(比如 where('column', operator, value)
)。 2. 你提到的 $sql->each
应该是直接对 $return
(即查询结果集合)进行操作,因为 get()
方法会返回一个包含数据库结果的集合对象。 3. 如果你确实需要分阶段构建查询,可以考虑使用闭包或者匿名函数来封装逻辑,但在这个场景下直接链式调用是最简洁且推荐的方式。
希望这能帮助到你!如果有其他关于阿里云产品的问题,也欢迎继续提问。