I'm trying to upload a users csv file and pass the data into a database but because the size of the csv / rows, it keeps timing out. The data must be checked to see if it's already in the database and update or create.
I have applied a chunk to the CSV for reading the data but didn't know if it's possible to add a chunk to the upload to database section?
Here is my function
public function import(Request $request) {
if($request->file('imported-file')) {
$path = $request->file('imported-file')->getRealPath();
$data = Excel::filter('chunk')->load($path)->chunk(200, function($results) {
foreach($results as $row) {
if(!empty($row['postcode'])) {
$url = "http://ift.tt/1jxG3tJ".urlencode($row['postcode'])."®ion=uk&key=";
$tmp = file_get_contents($url);
$xml = simplexml_load_string($tmp);
if((string)$xml->status == 'OK' && isset($xml->result[0])) {
$lat = 0;
$lng = 0;
if(isset($xml->result[0]->geometry->location->lat)) {
$lat = (string)$xml->result[0]->geometry->location->lat;
}
if(isset($xml->result[0]->geometry->location->lng)) {
$lng = (string)$xml->result[0]->geometry->location->lng;
}
}
Import::updateOrCreate(
[
'sitecode' => $row['sitecode']
],
[
'sitecode' => $row['sitecode'],
'sitename' => $row['sitename'],
'address_1' => $row['address_1'],
'address_2' => $row['address_2'],
'address_town' => $row['address_town'],
'address_postcode' => $row['postcode'],
'charity' => $row['charity'],
'latitude' => $lat,
'longitude' => $lng,
'approved' => 1
]
);
} else {
// Postcode not valid!!!
}
} // endforeach
Session::flash('sucess', 'Import was sucessful.');
return redirect()->route('locations');
});
} else {
Session::flash('error', 'Please select a file to upload!');
return back();
}
}
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire