我正在尝试使用Maatwebsite / Laravel-Excel创建或更新表。我将数据保存在不同的表中没问题。我想通过检查csv文件中的id来更新表地址数据(如果数据库中已经存在),我不知道该怎么做。
有人可以帮助我达到预期的效果!谢谢
这是要导入的类:
class AdresseImport implements ToModel
{
/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
$adresse =null;
if($row[0] != 'id' and !is_null($row[0])){
$id_logette = (isset($row[24])) ? intval($row[24]) : null;
$commune = Commune::where('nom_commune',$row[8])->first();
if(!$commune){
$commune = new Commune();
$commune->nom_commune =$row[8];
$commune->code_postal = $row[6];
$commune->code_insee =$row[7];
$commune->save();
}else{
if(isset($id_logette)){
$logette = Logette::find($id_logette);
$logette->id_commune = $commune->id_commune;
$logette->save();
}
}
$secteur = Secteur::where('nom_secteur',$row[5])->where('id_commune',$commune->id_commune)->first();
if(!$secteur){
$secteur = new Secteur();
$secteur->nom_secteur = $row[5];
$secteur->id_commune = $commune->id_commune;
$secteur->save();
}
$voie = Voie::where('nom_voie',$row[4])->where('id_commune',$commune->id_commune)->first();
if(!$voie){
$voie = new Voie([
'nom_voie' => $row[4],
'id_fantoir' => $row[1],
'nom_afnor' => $row[18],
'etroite' => $row[5],
'id_commune' => $commune->id_commune,
'id_etat_lieu' => (isset($row[22])) ? 1 : null
]);
$voie->save();
} else {
if(!isset($voie->id_etat_lieu)){
$voie->id_etat_lieu = (isset($row[22])) ? 1 : null;
$voie->save();
}
}
$adresse = new Adresse([
'id_sig' => $row[0],
'id_secteur' => $secteur->id_secteur,
'id_voie' => $voie->id_voie,
'numero' => $row[2],
'id_logette' => $id_logette,
'rep' => $row[3],
'lon' => str_replace(',', '.',$row[13]),
'lat' => str_replace(',', '.',$row[14]),
]);
$adresse->save();
}
return $adresse;
}
}
我在控制器Excel::import(new AdresseImport, $request->file('excel_adresse'));
例如,我的csv文件的内容。
id id_fantoir numero rep nom_voie secteur code_postal code_insee nom_commune code_insee_ancienne_commune nom_ancienne_commune x y lon lat alias nom_ld libelle_acheminement nom_afnor source_position source_nom_voie commentaires Pas d'accŠs Lieu de pr‚sentation Logette Terrain … Faire
92019_2k7yhg_00001 1 Rue Maximilien de Robespierre Secteur B 92290 92019 Chƒtenay-Malabry 645191,91 6852648,34 2,254234 48,771604 CHATENAY-MALABRY RUE MAXIMILIEN DE ROBESPIERRE inconnue inconnue
92019_2k7yhg_00002 2 Rue Maximilien de France Secteur B 92290 92019 Chƒtenay-Malabry 645183,83 6852656,09 2,254123 48,771673 CHATENAY-MALABRY RUE MAXIMILIEN DE ROBESPIERRE inconnue inconnue
92019_2k7yhg_00003 3 Rue Maximilien de Maroc Secteur B 92290 92019 Chƒtenay-Malabry 645205,13 6852631,76 2,254416 48,771456 CHATENAY-MALABRY RUE MAXIMILIEN DE ROBESPIERRE inconnue inconnue
92019_2k7yhg_00004 4 Rue Maximilien de Devcorp Secteur A 92290 92019 Chƒtenay-Malabry 645186,37 6852637,16 2,25416 48,771503 CHATENAY-MALABRY RUE MAXIMILIEN DE ROBESPIERRE inconnue inconnue
x 91-93 division leclerc