Eloquent:如何从 ::with( ) 结果中 'WhereNotNull'
Eloquent: How to 'WhereNotNull' from a ::with( ) result
我是 运行 以下具有 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' 字段为空。如何删除 objective
= null
?
的结果
我尝试在 ->get()
之前使用 ->whereHas('objective')
,但它没有任何改变。有没有另一种方法来评估 with
函数是否返回 null 保持相同的查询?
我想到的解决方案:
- 改用连接,这样我就可以在同一个查询中评估空结果。
- 使用 foreach 查看验证
objective
字段是否为空,并从我返回的列表中删除找到的结果。
如果 objective table 有 '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();
我找到的解决方案是将 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
存在的行。
我是 运行 以下具有 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' 字段为空。如何删除 objective
= null
?
我尝试在 ->get()
之前使用 ->whereHas('objective')
,但它没有任何改变。有没有另一种方法来评估 with
函数是否返回 null 保持相同的查询?
我想到的解决方案:
- 改用连接,这样我就可以在同一个查询中评估空结果。
- 使用 foreach 查看验证
objective
字段是否为空,并从我返回的列表中删除找到的结果。
如果 objective table 有 '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();
我找到的解决方案是将 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
存在的行。