我目前正在尝试从具有列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。 我的问题是如何通过查询获取重复数据,以便当我发送具有重复条目的请求时,我可以得到具有重复数据的响应。
答案 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();
});
答案 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))];
});