Php Laravel雄辩的复杂查询构建
我很难实现构建可过滤复杂查询的目标 我有五张桌子。其中之一是时间跟踪表。为了保持全局性,我只存储item_id和time_categories_id来识别它是哪个项目。 我还需要一些不直接相关的附加信息,例如,我需要分配给任务的客户信息 因此,我列出了以下简表:Php Laravel雄辩的复杂查询构建,php,mysql,sql,laravel,Php,Mysql,Sql,Laravel,我很难实现构建可过滤复杂查询的目标 我有五张桌子。其中之一是时间跟踪表。为了保持全局性,我只存储item_id和time_categories_id来识别它是哪个项目。 我还需要一些不直接相关的附加信息,例如,我需要分配给任务的客户信息 因此,我列出了以下简表: times -------------------------------------------------------- | id | name | description | item_id | time_category_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的多对多关系,但在这种情况下,我不希望得到所有时间的条目并在以后加载它。我只想选择相关的时间项目。