从whereIn获取副本-Laravel

时间:2019-03-05 12:51:13

标签: php mysql laravel

我目前正在尝试从具有列ID和名称的X表中获取数据。我在项目中使用Laravel,并在其中将其从X表中获取多个数据。它的工作完美,当我以(1,2,3,4)发送请求数据时,得到了预期的响应。但是,当我以(1,2,3,4,2)发送请求时,它正在为ID 1,2,3,4提供响应,但不会再次检索ID为2的重复数据。 以下是我的查询

 X::whereIn('id',$request->XIds)->get()->toArray();

假设$ request-> XIds为[1,2,3,4,2]。重复2。 我的问题是如何通过查询获取重复数据,以便当我发送具有重复条目的请求时,我可以得到具有重复数据的响应。

5 个答案:

答案 0 :(得分:1)

whereIn('id',array(1,2,3,4,2))将返回与给定数组中id字段值匹配的数据,因此它不会返回重复值,基本上它会检查id是否为inarray?如果是inarray,则选择该数据。

如果需要重复数据,则必须手动编写如下代码:

$my_data=[];

 foreach($request->XIds as $id){
     $xmodel=X::where('id',$id)->first();
     if($xmodel){
       array_push($my_data,$xmodel);
     }
 }

return response()->json($my_data,200);

答案 1 :(得分:1)

扩展@apokryfos解决方案。为了返回对象的一维集合,应使用->first()

$data = X::whereIn('id',$request->XIds)->get()->getDictionary();

return collect($request->XIds)->map(function ($id) use ($data) {
      return $data->get($id)->first(); 
});  

$ data输出:
enter image description here

映射的$ data输出:
enter image description here

答案 2 :(得分:0)

从数据库中获取数据后,必须使用PHP进行操作。

$collection = X::whereIn('id', $request->XIds)->get()->keyBy('id');

$counts = array_count_values($request->XIds);

foreach ($counts as $id => $count) {
    if ($count === 1) {
         continue;
    }
    for ($i = 0; $i < $count - 1; $i++) {
        $collection->push($collection->get($id));
    }
}

$yourFinalArray = $collection->values()->toArray();

答案 3 :(得分:0)

好吧,如果需要,您可以正确地投影数据:

$data = X::whereIn('id',$request->XIds)->get()->getDictionary();


return collect($request->XIds)->map(function ($id) use ($data) {
      return $data->get($id)->toArray(); 
})->all();  

但是,我建议您尝试一下逻辑,因为多次发送相同的数据没有客观优势。

答案 4 :(得分:0)

你在这里。

$result = X::whereIn('id', $request->XIds)->get();
$ids = $result->pluck('id')->toArray();
$resultInArray = $result->toArray();
$finalResult = collect($request->XIds)->map(function ($id) use($ids, $resultInArray) {
        return $resultInArray[array_search($id, array_values($ids))];
});