如何使用相关表中的数据过滤查询结果?

时间:2019-01-31 19:27:18

标签: laravel

想象一下MongoDB结构中的场景:

    # token
    token = '....'   

    # Api url
    url = '....'

    # Data to be sent to api
    payload = {"jName[fre]": "Test", "jName[eng]": "Test", "jDescription[fre]" : "Test", "jDescription[eng]" : "Test", "iPriorityId": 1}

    # The image file to be sent with data to api
    files = {'images': ('test.jpg', open('test.jpg', 'rw'), 'image/jpg')}

    # Pass in headers token
    headers = {'Authorization': 'Token tokenApp="myAppToken" Token token=' + token}

    # sending user info to app server using python "requests"
    response = requests.post(url, headers=headers, files=files, data=payload)

    print(response.text)

每个任务都有一个“版本”列,按“作业”版本进行过滤。

因此:作业v1.2.3具有任务1.1.1 + 1.2.1 + 1.2.2 + 1.2.3

我想创建一个查询,在该查询中,我选择的任务仅过滤那些“ =”版本的任务,并使用一些分页机制 (希望这很有意义)

这就是我正在尝试的:

"jobs" 1 -> * "tasks"

但是我得到的结果是空的。

2 个答案:

答案 0 :(得分:0)

如果使用 Laravel的分页器,该怎么办。

如果您正在处理的索引方法:

控制器:

public function index(){
    $data = DB::table('tasks')
         ->where('jobs.version', 'tasks.version')
         ->join('jobs', 'tasks.job_id', '=', 'jobs._id')
         ->paginate(20);

    return view('tasks.index',compact('data'))
         ->with('i', (request()->input('page', 1) - 1) * 10);
}

查看:

显示分页器

{!! $data->links() !!}

https://laravel.com/docs/5.7/pagination#displaying-pagination-results

答案 1 :(得分:0)

您也可以使用whereHas()进行此操作。请记住,这会在您的语句中添加一个子查询,并且某些数据库引擎不能非常有效地处理这些查询。