where子句在查询

时间:2017-09-29 16:49:53

标签: laravel

我构建了一个搜索模块,以便从不同的参数中获取结果!它的工作,但当我在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_licencecivilitelb_civilitelb_nomlb_prenom,   dt_naissancepaysfrpays,   activite_licencielb_activitecatg_licencelb_catg_lic,   type_licencelb_typesaisonslb_saisonlb_surclassement,   structuresnom_structurestructuresnum_structure,   lb_assurancecd_dept_naissancelb_ville_naissance,   lb_adressetel_fix_licencietel_port_licencieadresse_email   来自licencies内部联接activite_licencie   activite_licencieid = licenciesactivite_licencie_id内心   在saisons上加入saisonsid = licenciessaison_id内部联接   pays上的paysid = licenciespays_naissance_id内连接   type_licence上的type_licenceid = licenciestype_licence_id   structures上的内部联接structuresid =   licencies上的structure_idcivilite内部加入civiliteid =   licenciescivilite_id内部加入catg_licence   catg_licenceid = licenciescatg_licence_id其中   type_licence_id = 4且catg_licence_id = 1)

2 个答案:

答案 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而不是属性中。