Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel雄辩的复杂查询构建_Php_Mysql_Sql_Laravel - Fatal编程技术网

Php Laravel雄辩的复杂查询构建

Php Laravel雄辩的复杂查询构建,php,mysql,sql,laravel,Php,Mysql,Sql,Laravel,我很难实现构建可过滤复杂查询的目标 我有五张桌子。其中之一是时间跟踪表。为了保持全局性,我只存储item_id和time_categories_id来识别它是哪个项目。 我还需要一些不直接相关的附加信息,例如,我需要分配给任务的客户信息 因此,我列出了以下简表: times -------------------------------------------------------- | id | name | description | item_id | time_category_id

我很难实现构建可过滤复杂查询的目标

我有五张桌子。其中之一是时间跟踪表。为了保持全局性,我只存储item_id和time_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的筛选数据


有人有什么建议吗?

Ouhh。。。如果您需要分配给任务的客户信息,我认为可以使用雄辩的ORM,为什么不使用雄辩的ORM呢?你读过Laravel多对多关系吗?我认为您需要client_项目表,因为它是多对多关系,然后创建模型。是的,我也使用了雄辩的ORM和Laravel的多对多关系,但在这种情况下,我不希望得到所有时间的条目并在以后加载它。我只想选择相关的时间项目。