我正在运行以下具有with()
关系的查询。
$logbook_objectives = self::whereIn('lobjective_id', $logbook_objectives_ids)
->with(['objective' => function($q) use ($course_objective_ids){
$q->select(['objective_id', 'objective_code', 'objective_name'])
->whereIn('objective_id', $course_objective_ids)
->whereIn('objective_parent', $course_objective_ids, 'or');
}])
->withCount(['entryObjectives' => function ($q) use ($learner_id) {
$q->where('created_by', $learner_id);
}])
->get();
由于with
函数中的规则,有时返回的“ objective”字段为null。如何删除具有objective
= null
的结果?
我尝试在->whereHas('objective')
之前使用->get()
,但是它没有任何改变。还有另一种方法可以评估with
函数是否返回null并保持相同的查询吗?
我的解决方案:
objective
字段是否为空,并从返回的列表中删除找到的结果。答案 0 :(得分:0)
如果目标表具有'objective_id'或任何其他键作为主键,则将该键放在whereNotNull中,如下所示:
$logbook_objectives = self::whereIn('lobjective_id', $logbook_objectives_ids)
->with(['objective' => function($q) use ($course_objective_ids){
$q->select(['objective_id', 'objective_code', 'objective_name'])
->whereIn('objective_id', $course_objective_ids)
->whereIn('objective_parent', $course_objective_ids, 'or')->whereNotNull('objective_id');
}])
->withCount(['entryObjectives' => function ($q) use ($learner_id) {
$q->where('created_by', $learner_id);
}])
->get();
答案 1 :(得分:0)
我发现的解决方案是将whereHas
与with
函数一起使用。查询为:
$logbook_objectives = self::whereIn('lobjective_id', $logbook_objectives_ids)
->with(['objective' => function($q) use ($course_objective_ids){
$q->select(['objective_id', 'objective_code', 'objective_name'])
->whereIn('objective_id', $course_objective_ids)
->whereIn('objective_parent', $course_objective_ids, 'or');
}])
->whereHas('objective', function($q) use ($course_objective_ids){
$q->select(['objective_id', 'objective_code', 'objective_name'])
->whereIn('objective_id', $course_objective_ids)
->whereIn('objective_parent', $course_objective_ids, 'or');
})
->withCount(['entryObjectives' => function ($q) use ($learner_id) {
$q->where('created_by', $learner_id);
}])
->get();
在这种情况下,仅返回objective
存在的行。