如何连接从数据库中提取的数组中每个元素的结果,并在Laravel 8中以json形式返回



我正在做一个Laravel 8项目,我在表单的多选栏中选择了一堆类别,我想在数据库中返回我选择的每个类别的供应商,以便在表单的下一个选择栏中显示它们,我使用ajax,但我似乎不知道如何将每个类别的供应商组合成一个最终结果,所以我可以用json将其发送回我的视图,有人能告诉我我做错了什么,以及如何解决这个问题吗?这是我的控制器

public function get_fournisseurs(Request $request){
try {
if($request->ajax()) {
$query = $request->get('selectednumbers');
if(empty($query)) {
return back()->withError("Désolé, une erreur de serveur s'est produite (requête vide)");
}
else {
$fournisseurs[] = new FourCats();
foreach ($query as $value) {
$fou[]=FourCats::join('fournisseurs','four_cat.four', '=', 'fournisseurs.id')
->where('four_cat.cat','=', $value)
->select('fournisseurs.id','fournisseurs.nomSociete','fournisseurs.id','fournisseurs.tel')
->get();
foreach($fou as $f) {
$fournisseurs = implode(array($f));
}
$fournisseurs = implode(array( $fournisseurs));
}
return json_encode(array('data'=>$fournisseurs));
}
}
} catch (Throwable $th) {
throw $th;
}

这是我的ajax方法

$('#first-choice').change(function(){
if( $('#first-choice :selected').length > 0){
var selectednumbers = [];
$('#first-choice :selected').each(function(i, selected) {
selectednumbers[i] = $(selected).val();
});
console.log(selectednumbers);
$.ajax({
url: '{{ url('get_fournisseurs') }}',
method:'GET',
data: {selectednumbers: selectednumbers },
dataType: 'json',
success: function(dataResult){
var resultData = dataResult.data;
console.log(resultData);
$('#second-choice').empty();
$.each(JSON.parse(resultData), function(i,row){
$('#second-choice').append(new Option( row.id+'-'+row.nomSociete, row.id));
})
}
});
}
});

现在这个工作没有错误,除了我的控制器的逻辑错误。这个代码向我显示了最后一个选定类别的供应商,即使我发送了3个或更多类别,我也希望最终结果是组合所有选定类别的提供商,而不仅仅是列表中的最后一个,即使是双循环,它也不起作用。请帮助我修复循环逻辑

只需删除或取消注释这一行就可以了
internalde()生成一个字符串,但您需要一个数组
这就是您出现转换错误的原因。

$fournisseurs = implode($fournisseurs);

您定义$fournisseurs=[];两次只需取消注释即可。
然后进行

return response()->json($fournisseurs);

您还可以使用检查json响应

$data = response()->json($fournisseurs);
print_r($data)

我不是Laravel专家,但我认为你不需要foreach循环,数据库中的所有内容都将在变量中。请参阅:

$fournisseurs = DB::table('yourTableName') -
> join('fournisseurs', 'four_cat.four', '=', 'fournisseurs.id') -
> select('fournisseurs.id', 'fournisseurs.nomSociete', 'fournisseurs.id', 'fournisseurs.tel') -
> where('four_cat.cat', '=', $value) -
> get();

return json_encode(array($fournisseurs));

我找到了对我有用的东西^^感谢那些试图帮助的人

我的控制器:

public function get_fournisseurs(Request $request){
try {
if($request->ajax()) {
$query = $request->get('selectednumbers');
if(empty($query)) {
return back()->withError("Désolé, une erreur de serveur s'est produite (requête vide)");
}
else {
$fournisseurs=FourCats::join('fournisseurs','four_cat.four', '=', 'fournisseurs.id')
->whereIn('four_cat.cat',$query)
->select('fournisseurs.id','fournisseurs.nomSociete','fournisseurs.id','fournisseurs.tel')
->distinct()
->get();
return json_encode(array('data'=>$fournisseurs));
// return response()->json($fournisseurs);
}
}
} catch (Throwable $th) {
throw $th;
}
}

ajax方法:

$('#first-choice').change(function(){
if( $('#first-choice :selected').length > 0){
var selectednumbers = [];
$('#first-choice :selected').each(function(i, selected) {
selectednumbers[i] = $(selected).val();
});
console.log(selectednumbers);
$.ajax({
url: '{{ url('get_fournisseurs') }}',
method:'GET',
data: {selectednumbers: selectednumbers },
dataType: 'json',
success: function(dataResult){
var resultData = dataResult.data;
$('#second-choice').empty();
$.each(resultData, function(i,row){
$('#second-choice').append(new Option( row.id+'-'+row.nomSociete, row.id));
})
}
});
}
});

相关内容

最新更新