【发布时间】:2018-03-11 15:16:05
【问题描述】:
我构建了一个搜索模块来从不同的参数中获取结果!它可以工作,但是当我何时在 csv 中导出结果时,我的连接表出现问题。例如,当我使用 catg_licence_id 进行搜索时,我会遇到如下异常:
SQLSTATE[23000]:违反完整性约束:1052 列 where 子句中的“catg_licence_id”不明确
我的控制器在这里获取结果并使用连接表生成文件以从其他表中获取值而不是简单的 ids 。希望有人能帮助我。提前非常感谢:)
public function exportLicencesExcelWithParam(Request $request){
$type_licence = Type_licence::pluck('lb_type' , 'id');
$activite = ActiviteLicencie::pluck('lb_activite' , 'id');
$catg_licence = CatgLicence::pluck('lb_catg_lic' , 'id');
$structure = Structure::select('num_structure', 'nom_structure' , 'id')
->get()
->mapWithKeys(function($i) {
return [$i->id => $i->num_structure.' - '.$i->nom_structure];
});
$query = Licencies::query();
$filters = [
'type_licence' => 'type_licence_id',
'activite_licencie' => 'activite_licencie_id',
'assurance' => 'lb_assurance_etat',
'catg_licence' => 'catg_licence_id',
'structure' => 'structure_id',
];
foreach ($filters as $key => $column) {
if ($request->has($key)) {
$query->where($column, $request->{$key});
}
}
$action = Input::get('action', 'none');
if($action =='send'){
//HERE I WANT TO GENERATE THE CSV FILE BUT I NEED TO GET THE JOIN TABLES TO DISPLAY THE RESULT
$licencies = $query->join('activite_licencie', 'activite_licencie.id', '=', 'licencies.activite_licencie_id')
->join('saisons', 'saisons.id', '=', 'licencies.saison_id')
->join('pays', 'pays.id', '=', 'licencies.pays_naissance_id')
->join('type_licence', 'type_licence.id', '=', 'licencies.type_licence_id')
->join('structures', 'structures.id', '=', 'licencies.structure_id')
->join('civilite', 'civilite.id', '=', 'licencies.civilite_id')
->join('catg_licence', 'catg_licence.id', '=', 'licencies.catg_licence_id')
->select('num_licence', 'civilite.lb_civilite', 'lb_nom', 'lb_prenom', 'dt_naissance', 'pays.fr as pays', 'activite_licencie.lb_activite', 'catg_licence.lb_catg_lic', 'type_licence.lb_type', 'saisons.lb_saison', 'lb_surclassement', 'structures.nom_structure', 'structures.num_structure', 'lb_assurance', 'cd_dept_naissance', 'lb_ville_naissance', 'lb_adresse', 'tel_fix_licencie', 'tel_port_licencie', 'adresse_email')
->get();
$licencies->map(function ($licencie) {
$licencie['dt_naissance'] = \Carbon\Carbon::parse($licencie['dt_naissance'])->format('d/m/Y');
$licencie['lb_nom'] = strtoupper($licencie['lb_nom']);
$licencie['lb_prenom'] = ucfirst(strtolower($licencie['lb_prenom']));
if ($licencie['num_structure'] == 662883) {
$licencie['lb_activite'] = 'Super League';
} elseif ($licencie['num_structure'] == 311197) {
$licencie['lb_activite'] = 'ChampionShip';
} else {
//do nothing
}
if ($licencie['lb_activite'] == 'Tricolore LER' or $licencie['lb_activite'] == 'Tricolore - Autres Divisions') {
$licencie['lb_activite'] = 'Tricolore';
}
if ($licencie['lb_type'] == 'Membre') {
$licencie['lb_catg_lic'] = '';
}
return $licencie;
});
$date = Carbon::now('Europe/Paris')->format('d-m-Y h:m:s');
$file = Excel::create('' . $date . '', function ($excel) use ($licencies) {
$excel->sheet('Excel', function ($sheet) use ($licencies) {
$sheet->fromArray($licencies);
});
})->string('csv');
Storage::disk('local')->put('licencies_export_'.$date.'.csv' , $file);
return back()->with('status', "Fichier Exporté");
}else{
}
return view('export/licences' , compact('type_licence' , 'structure' , 'structures' , 'licencies' , 'activite' , 'catg_licence'));
}
这里是完整的例外:
SQLSTATE[23000]:违反完整性约束:1052 列 where 子句中的“type_licence_id”不明确(SQL:选择
num_licence,civilite.lb_civilite,lb_nom,lb_prenom,dt_naissance,pays.fr作为pays,activite_licencie.lb_activite,catg_licence.lb_catg_lic,type_licence.lb_type,saisons.lb_saison,lb_surclassement,structures.nom_structure,structures.num_structure,lb_assurance,cd_dept_naissance,lb_ville_naissance,lb_adresse,tel_fix_licencie,tel_port_licencie,adresse_email来自licencies内连接activite_licencieonactivite_licencie.id=licencies.activite_licencie_id内 在saisons.id上加入saisons=licencies.saison_id内连接paysonpays.id=licencies.pays_naissance_id内连接type_licenceontype_licence.id=licencies.type_licence_id内部连接structuresstructures.id=licencies.structure_id内部连接 civilitecivilite.id=licencies.civilite_id内连接catg_licenceoncatg_licence.id=licencies.catg_licence_id其中type_licence_id= 4 和catg_licence_id= 1)
【问题讨论】:
标签: laravel