Laravel空集合时在过滤器中添加新参数以获取notEmpty集合 [英] Laravel while empty collection add new parameters in filters to get notEmpty collection

查看:81
本文介绍了Laravel空集合时在过滤器中添加新参数以获取notEmpty集合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个查询,他们返回一个空集合,其过滤器参数为categorie_compet_id,值为1.

I have this query who return an empty collection with the filter param categorie_compet_id with value 1.

当集合为空时,我需要更新此ID以获取notEmpty集合.

while the collection is empty i need to update this id in order to get a notEmpty collection.

categorie_compet_id可以从1变为10.

我该怎么做呢?

$arbitres = Licencies::getArbitres();
    $arbitres->load('rencontreOfficiels');
    $arbitres->load('divisions');

$arbitres = $arbitres->reject(function ($arbitre) use ($rencontre) {
    return $arbitre->rencontreOfficiels->contains(function ($rencontreOfficiels) use ($rencontre) {
        return $rencontreOfficiels->rencontre_id === $rencontre->id;
    });
})->filter(function ($arbitre) {
    return $arbitre->divisions->contains('categorie_compet_id', 1);
})->filter(function($arbitre) {
    return $arbitre->level >= 3;
});

更新

$arbitres->load('rencontreOfficiels');
$arbitres->load('divisions');

$arbitres = $arbitres->reject(function ($arbitre) use ($rencontre) {
    return $arbitre->rencontreOfficiels->contains(function ($rencontreOfficiels) use ($rencontre) {
        return $rencontreOfficiels->rencontre_id === $rencontre->id;
    });
})->filter(function ($arbitre) {
    return $arbitre->divisions->contains('categorie_compet_id', 1);
})->filter(function($arbitre) use ($rencontre) {
    return $arbitre->doesnthave('rencontreOfficiels')->where('rencontreOfficiels.dt_rencontre' , $rencontre->dt_rencontre);
});

//on génére les meilleurs arbitres
for ($i = 1; $i < 7; $i++) {
    $filtered = $arbitres->filter(function ($arbitre) use ($i) {
        return $arbitre->level <= $i;
    });

    if ($filtered->isNotEmpty()) {
        $arbitres = $filtered;
        break;
    }
}

这是我在模型中的getArbitres方法:

Here's my getArbitres method in model:

public static function getArbitres(){
    $all_licences = Licencies::whereIn('activite_licencie_id' , [24,25,50,80])
        ->where('valid_licence_id' , 3)
        ->where('saison_id' , self::getSaison()->id)
        ->where('dispo' , 1)
        ->get();

    return $licences;
}

推荐答案

您可以使用for循环.

You could use a for loop.

$arbitres = $arbitres->reject(function ($arbitre) use ($rencontre) {
    return $arbitre->rencontreOfficiels->contains(function ($rencontreOfficiels) use ($rencontre) {
        return $rencontreOfficiels->rencontre_id === $rencontre->id;
    });

for ($i = 3; $i < 10; $i++) {
    $filtered = $arbitres->filter(function ($arbitre) use ($i) {
        return $arbitre->level >= $i;
    });

    if ($filtered->isNotEmpty()) {
        $arbitres = $filtered;
        break;
    }
}

只需用您的最高等级替换10.

Simply replace 10 by your max level.

检索时,您应该从数据库中过滤$arbitres集合,而不是随后对其进行过滤.

You should be filtering your $arbitres collection from the database when retrieving instead of filtering them after.

$arbitres = App\Arbitres::whereHas('rencontreOfficiels', function ($query) use ($rencontre) {
    $query->where('rencontre_id', $rencontre->id);
})->whereDoesntHave('rencontreOfficiels', function ($query) use ($rencontre) {
    $query->where('dt_rencontre', $rencontre->dt_rencontre);
})whereHas('divisions', function ($query) {
    $query->where('categorie_complet_id', 1);
})->get();

更新2

由于无法在检索时过滤$arbitres,因此可以像这样过滤它们:

Update 2

Since you cannot filter the $arbitres upon retrieval, you can filter them like this:

$arbitres = $arbitres->reject(function ($arbitre) use ($rencontre) {
    return $arbitre->rencontreOfficiels->contains(function ($rencontreOfficiels) use ($rencontre) {
        return $rencontreOfficiels->rencontre_id === $rencontre->id;
    });
})->filter(function ($arbitre){
    return $arbitre->divisions->contains('categorie_compet_id', 1);
})->filter(function($arbitre) use ($rencontre){
    return ! $arbitre->rencontreOfficiels->contains('dt_rencontre' , $rencontre->dt_rencontre);
});

这篇关于Laravel空集合时在过滤器中添加新参数以获取notEmpty集合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆