使用 Eloquent Builder 连接查询

Concatenate queries using Eloquent Builder

如何使用 Eloquent Builder 连接查询?

我正在根据条件(where 子句)构建查询并从 URL 获取限制和偏移量。然后将这些查询传递给 ->get() 方法以获取结果。我想使用 Eloquent 而不是查询生成器。

这就是您在 eloquent 中构建查询的方式(我已经给出了使用多个 where 子句的示例):

$result = ModelName::where('key_1', '=' , 'value_1')
                     ->where('key_2', '>', 'value_2')
                     ->take(4)
                     ->offset(2)
                     ->get()

take() 方法会将结果数限制为 4,偏移量为 2。

http://laravel.com/docs/5.0/eloquent


更新

根据 OP 在此处 https://laracasts.com/discuss/channels/general-discussion/eloquent-query-builder 的问题,我正在更新我的答案。

你可以这样做:

if($params)
{
    $query = $this->model;
    foreach($params['search'] as $param)
    {
        $query = $query->where($param['where'],'=',$param['value']);
    }

    if (isset($params['start']))
    {
        $query = $query->offset($params['start'] );
    }

    if(isset($params['count']))
    {
        $query = $query->take($params['count']);
    }

    if (isset($params['sortColumn']))
    {
        $ascending = $params['ascending'] == 'true' ? 'ASC' : 'DESC';
        $query = $query->orderBy($params['sortColumn'], $ascending);
    }

}

$query->get();

您需要的是再次将函数的结果分配给模型。

你有:

if($params)
    {
        foreach($params['search'] as $param)
        {
            $this->model->where($param['where'],'=',$param['value']);
        }

        if (isset($params['start']))
        {
            $this->model->offset($params['start'] );
        }

        if(isset($params['count']))
        {
            $this->model->take($params['count']);
        }

        if (isset($params['sortColumn']))
        {
            $ascending = $params['ascending'] == 'true' ? 'ASC' : 'DESC';
            $this->model->orderBy($params['sortColumn'], $ascending);
        }

    }

$this->model->get();

你需要使用:

if($params)
    {
        foreach($params['search'] as $param)
        {
            $this->model = $this->model->where($param['where'],'=',$param['value']);
        }

        if (isset($params['start']))
        {
            $this->model = $this->model->offset($params['start'] );
        }

        if(isset($params['count']))
        {
            $this->model = $this->model->take($params['count']);
        }

        if (isset($params['sortColumn']))
        {
            $ascending = $params['ascending'] == 'true' ? 'ASC' : 'DESC';
            $this->model = $this->model->orderBy($params['sortColumn'], $ascending);
        }

    }

$data = $this->model->get();