Laravel Eloquent复杂查询构建

时间:2015-09-29 08:01:52

标签: php mysql sql laravel

我无法实现构建可过滤的复杂查询的目标。

我有5张桌子。其中一个是时间跟踪表。为了保持全局性,我只需存储item_idtime_categories_id来识别它是哪个项目。 我还需要一些不直接相关的附加信息,例如,我需要分配给任务的客户端信息。

所以我有以下表格(以简短形式列出):

times
--------------------------------------------------------
| id | name | description | item_id | time_category_id |
--------------------------------------------------------

time_categories
-------------
| id | name |
-------------

clients
------------------------------------
| id | company| name | description | 
------------------------------------

(client has many projects and projects may have many clients)

projects
------------------------------------
| id | company| name | description | 
------------------------------------

tasks
----------------------------------------
| id | name | description | project_id |
----------------------------------------

tickets
------------------------------------------------
| id | company| name | description | client_id |
------------------------------------------------

现在我想创建一个过滤函数,其中的返回值应取决于是否提交了客户端或项目ID。

对于此过滤器,我创建了以下查询:

$timeQuery = Time::select(array(
'times.*',
'time_categories.name as type',
'tasks.name as task_name',
'tasks.description as task_description',
'tickets.name as ticket_name',
'tickets.description as ticket_description'))
->join('time_categories','times.time_category_id','=','time_categories.id')
->leftJoin('tasks',function($join) use ($project){
    if(!empty($project))
    {
        $join->on('times.item_id', '=', 'tasks.id')
        ->where('tasks.project_id','=',$project);
    }else{
        $join->on('times.item_id', '=', 'tasks.id');
    }
})
->leftJoin('tickets',function($join) use ($client){
    if(!empty($client))
    {
        $join->on('times.item_id','=','tickets.id')
            ->where('tasks.project_id','=',$client);
    }else{
        $join->on('times.item_id','=','tickets.id');
    }
});

所以我最终到了这里。我没有收到错误,但是我收到所有数据而不是仅依赖于客户端或项目ID的过滤数据。

有人有建议吗?

0 个答案:

没有答案