我构建了一个搜索模块,以便从不同的参数中获取结果!它的工作,但当我在csv中导出结果时,我的连接表出现问题。例如,当我用catg_licence_id搜索时,我得到一个例外:
SQLSTATE [23000]:完整性约束违规:1052列 where子句中的'catg_licence_id'是不明确的
这里我的控制器获取结果并使用连接表生成文件以从其他表中获取值而不是简单的ID。希望有人能帮助我。非常感谢提前:)
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:select
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_licencie
activite_licencie
。id
=licencies
。activite_licencie_id
内心 在saisons
上加入saisons
。id
=licencies
。saison_id
内部联接pays
上的pays
。id
=licencies
。pays_naissance_id
内连接type_licence
上的type_licence
。id
=licencies
。type_licence_id
structures
上的内部联接structures
。id
=licencies
上的structure_id
。civilite
内部加入civilite
。id
=licencies
。civilite_id
内部加入catg_licence
catg_licence
。id
=licencies
。catg_licence_id
其中type_licence_id
= 4且catg_licence_id
= 1)
答案 0 :(得分:1)
当它说它不明确时,意味着mysql正在连接表,并且在另一个表上找到特定字段(catg_licence_id)。所以,当你在这个领域加入某些东西时,他并不知道要加入哪个表格。一个解决方案是将表名放在之前,比如@ user3154557就是说
- >加入(' tablename',' tablename.field',' othertablename.field')
答案 1 :(得分:0)
您没有在任何地方加入'许可'表。
->join('catg_licence', 'catg_licence.id', '=', 'licencies.catg_licence_id')
那条线是你的问题。
您的选择中也可能出现相同的错误。当你加入一堆表时,最好将table.property放在select而不是属性中。