Laravel 5添加条件子句查询

时间:2018-01-21 01:01:42

标签: php mysql laravel laravel-5

我是Laravel的新手。我只是想查询变量,然后根据需要附加约束。

这是控制器:

public function index (Request $request)
{
    $limit = 5;
    $query_params = $request->query();
    if(isset($query_params['limit'])){
        $limit = $query_params['limit'];
    }
    //This chained query works. 
    $query = DB::table('users')->where('id', '>', '23')->paginate($limit);

    //This one doesn't work
    /*$query = DB::table('users');
    $query->where('id', '>', '23');
    $query->paginate($limit);*/

    //also tried with @btl suggestion and with following code:
    /*$query = DB::table('users')->where('id', '>', '23');
    $query->paginate($limit);*/
    return $query;
}

它传达了这个错误:

"message": "Object of class Illuminate\\Database\\Query\\Builder could not be converted to string",
  "exception": "ErrorException",
  "file": "/home/sms/laraveresources/vendor/symfony/http-foundation/Response.php",
  "line": 399,

任何想法如何实现它?。

我没有找到有关在官方文档上向查询添加条件子句的示例。

我终于开始工作了。我必须在一个变量中为查询构建和添加条件,但是在一个单独的变量中对它进行分页。以下代码有效。

   public function index (Request $request)
{
    $limit = 5;
    $query_params = $request->query();
    if(isset($query_params['limit'])){
        $limit = $query_params['limit'];
    }

    $query = DB::table('users');
    if(isset($query_params['sort'])){
        $sort = $query_params['sort'];
        $direction = 'ASC';
        if(isset($query_params['direction'])){
            $direction = $query_params['direction'];
        }
        $query->orderBy($sort, $direction);
    }
    $query2 = $query->paginate($limit);
    return $query2;
}

提前致谢。

2 个答案:

答案 0 :(得分:3)

您还需要将$query->where('id', '>', '23');分配给变量。 where返回带有子句的模型实例,它因未被赋值给变量而丢失。

尝试以下方法:

$query = DB::table('users');
$query = $query->where('id', '>', '23');
$query->paginate($limit);

答案 1 :(得分:0)

missing将查询分配给变量。这样做 -

$query = DB::table('users');
$query = $query->where('id', '>', '23');
$query = $query->paginate($limit);

return $query;

或 -

$query = DB::table('users');
$query = $query->where('id', '>', '23');

return $query->paginate($limit);