Laravel通过每个收集项目

时间:2016-09-27 17:05:45

标签: laravel eloquent

我有以下查询,它会重新列出最多10个项目的列表:

$type1Counters = TypeEffects::where('defence',$defender->type1_id)
        ->where("modifier",'>',1)
        ->get();

此查询返回TypeEffects的集合。每个类型效果都包含type_id列。

我的数据库中有Defender对象,其中包含type1_idtype2_id列。

主要目标

我需要让所有防御者, WHERE 他们的type1_idtype2_id列等于我在$type1Counters查询中获得的每个集合项type_id。我一直在考虑循环我的$type1Counters,但后来我最终得到了这样的东西:

foreach ($type as $type1Counters) {
$x++;
$defender[$x] = Defender::where('type1_id',$type->type_id)
->orWhere('type2_id',$type->type_id);
}

然后我最终得到了一系列的集合,而我需要在一个集合中将所有这些集合放在一起,由后卫power列排序。

我有什么想法可以为我的$type1Counters查询中找到的所有类型的防御者获取一个集合?

1 个答案:

答案 0 :(得分:1)

您可以使用方法whereIn,它将查找您传递的数组中的所有项目。

$type1Counters = TypeEffects::where('defence',$defender->type1_id)
        ->where("modifier",'>',1)
        ->groupBy('type_id')
        ->pluck('type_id');

$type1Counters将是一个包含所有可能type_ids的数组。 现在您可以获取所述类型的所有防御者:

Defender::whereIn('type1_id', $type1Counters)
    ->orWhereIn('type2_id',$type1Counters)
    ->get();