Php Laravel雄辩地加入奇怪的查询
我使用laravel的Elount来查询数据库中的多个表。以下查询正在运行。但是,我想向查询中添加一些内容,根据Php Laravel雄辩地加入奇怪的查询,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我使用laravel的Elount来查询数据库中的多个表。以下查询正在运行。但是,我想向查询中添加一些内容,根据Jobtable columnarchived的值是否设置为0或1来过滤出里程碑 $app->get('/dashboard/user', function() { global $app; $milestones = Milestone::where('user_id', '=', $app->user->user_id) ->
Job
table columnarchived
的值是否设置为0
或1
来过滤出里程碑
$app->get('/dashboard/user', function() {
global $app;
$milestones = Milestone::where('user_id', '=', $app->user->user_id)
->where('completed_flag', '=', '0')
->with('job.businessUnit')
->with('user')
->orderBy('deadline', 'asc')
->get();
$milestones = $milestones->sort(function($a, $b) {
$a0 = ($a->milestone_id == $a->job->next_incomplete_milestone_id);
$b0 = ($b->milestone_id == $b->job->next_incomplete_milestone_id);
return ( ($a0 == $b0) ? strcmp($a->deadline, $b->deadline) :
(($a0 == true) ? -1 : 1));
});
print json_encode(array(
'user' => $app->user->toArray(),
'milestones' => $milestones->toArray()
));
});
我一直在尝试做以下每一项:
->join('jobs','jobs.archived','=','0')
//
->where('archived','=','0')
//
->with('jobs.archived')
//
->with('jobs')
//
->where('jobs.archived', '=', '0')
你要找的是方法
例如:
$milestones = Milestone::whereHas('job', function($query) {
$query->where('archived','=','0');
})
... // took out rest of code for brevity
->get();
此whereHas
示例将仅检索存档值为0的作业的里程碑
关于@Tezla提到的上述评论,我不认为约束急切的负载是你想要的,因为它仍然会让你获得不符合要求的里程碑。相反,它只会为关系返回一个空的作业集合。结果表明,我必须做一些事情来镜像下面的SQL
查询
SELECT * FROM milestones JOIN jobs ON milestones.job_id = jobs.job_id WHERE milestones.user_id = 2 AND milestones.completed_flag = 0 AND jobs.archived = 0;
在作业和里程碑上有一个内部联接
$app->get('/dashboard/user', function() {
global $app;
$milestones = Milestone::where('user_id', '=', $app->user->user_id)
->join('jobs', 'jobs.job_id', '=', 'milestones.job_id')
->where('jobs.archived', '=', '0')
->where('completed_flag', '=', '0')
->with('job.businessUnit')
->with('user')
->orderBy('deadline', 'asc')
->get();
$milestones = $milestones->sort(function($a, $b) {
$a0 = ($a->milestone_id == $a->job->next_incomplete_milestone_id);
$b0 = ($b->milestone_id == $b->job->next_incomplete_milestone_id);
return ( ($a0 == $b0) ? strcmp($a->deadline, $b->deadline) :
(($a0 == true) ? -1 : 1));
});
$milestones = $milestones->values();
print json_encode(array(
'user' => $app->user->toArray(),
'milestones' => $milestones->toArray()
));
});
如果要筛选此部分,请使用('job.businessUnit')
。您可以使用.Hmmm,这会在不同的位置启动查询,因此它实际上并不是在做相同的事情,因为我最难使用两个表Milestone和Job,然后使用Job列archived