Laravel在空集合时在过滤器中添加新参数以获取notEmpty集合

Laravel在空集合时在过滤器中添加新参数以获取notEmpty集合,laravel,Laravel,我有一个查询,它返回一个空集合,其筛选器参数categorie\u compet\u id的值为1 当集合为空时,我需要更新此id以获得notEmpty集合 category\u compet\u id可以从1变为10 我怎样才能正确地做到这一点 $arbitres=licensions::getArbitres(); $arbitres->load('renContrterOfficels'); $arbitres->load('divisions'); $arbitres=$arbitres

我有一个查询,它返回一个空集合,其筛选器参数
categorie\u compet\u id
的值为
1

当集合为空时,我需要更新此id以获得notEmpty集合

category\u compet\u id
可以从
1
变为
10

我怎样才能正确地做到这一点

$arbitres=licensions::getArbitres();
$arbitres->load('renContrterOfficels');
$arbitres->load('divisions');
$arbitres=$arbitres->reject(函数($arbitre)使用($RECONTRE){
返回$arbitre->rencontreofficels->contains(函数($rencontreofficels)use($rencontre){
返回$rencontrolofficels->rencontrol\u id===$rencontrol->id;
});
})->过滤器(功能($arbitre){
返回$arbitre->divisions->contains('categorie\u compet\u id',1);
})->过滤器(功能($arbitre){
返回$arbitre->level>=3;
});
更新
$arbitres->load('rencontreofficels');
$arbitres->load('divisions');
$arbitres=$arbitres->reject(函数($arbitre)使用($RECONTRE){
返回$arbitre->rencontreofficels->contains(函数($rencontreofficels)use($rencontre){
返回$rencontrolofficels->rencontrol\u id===$rencontrol->id;
});
})->过滤器(功能($arbitre){
返回$arbitre->divisions->contains('categorie\u compet\u id',1);
})->过滤器(功能($arbitre)使用($rencontre){
返回$arbitre->doesnthave('rencontreofficials')->其中('rencontreofficials.dt\u-rencontrol',$rencontrol->dt\u-rencontrol);
});
//论自由裁量权
对于($i=1;$i<7;$i++){
$filtered=$arbitres->filter(函数($arbitre)使用($i){
返回$arbitre->level isNotEmpty()){
$arbitres=$filtered;
打破
}
}
下面是我在模型中的
getArbitres
方法:

公共静态函数getArbitres(){
$all_licenses=许可证::其中('activite_licensie_id',[24,25,50,80])
->其中('有效的许可证'id',3)
->其中('saison_id',self::getSaison()->id)
->其中('dispo',1)
->get();
退还$10许可证;
}

您可以使用for循环

$arbitres=$arbitres->拒绝(函数($arbitre)使用($rencontre){
返回$arbitre->rencontreofficels->contains(函数($rencontreofficels)use($rencontre){
返回$rencontrolofficels->rencontrol\u id===$rencontrol->id;
});
对于($i=3;$i<10;$i++){
$filtered=$arbitres->filter(函数($arbitre)使用($i){
返回$arbitre->level>=$i;
});
如果($filtered->isNotEmpty()){
$arbitres=$filtered;
打破
}
}
只需将
10
替换为最高级别即可

更新 在检索时,您应该从数据库中筛选
$arbitres
集合,而不是在检索后进行筛选

$arbitres=App\arbitres::whereHas('rencontreofficiles',函数($query)use($rencontre){
$query->where('rencontrol\u id',$rencontrol->id);
})->何处有('rencontreofficials',函数($query)使用($rencontre){
$query->where('dt\u rencontrol',$rencontrol->dt\u rencontrol);
})whereHas('divisions',function($query){
$query->where('categorie\u complett\u id',1);
})->get();
更新2 由于检索时无法过滤
$arbitres
,因此可以按如下方式过滤它们:

$arbitres=$arbitres->拒绝(函数($arbitre)使用($rencontre){
返回$arbitre->rencontreofficels->contains(函数($rencontreofficels)use($rencontre){
返回$rencontrolofficels->rencontrol\u id===$rencontrol->id;
});
})->过滤器(功能($arbitre){
返回$arbitre->divisions->contains('categorie\u compet\u id',1);
})->过滤器(功能($arbitre)使用($rencontre){
return!$arbitre->rencontractionofficials->contains('dt\u-rencontrol',$rencontrol->dt\u-rencontrol);
});

这就是我要找的,我在办公室时会试试,我会让你知道很多thanks@MathieuMourareau当然:)那是工作人员非常感谢,我在循环之前添加了一个新的过滤器,以便不获取在同一天已经处于renControlOfficels关系但不起作用的仲裁人return$arbitre->doesnthave('renconstreofficials');没有效果我应该只得到两个items@MathieuMourareau这是因为过滤器返回的对象是正值,因此通过了过滤器测试。