If it works why not, at least you can do custom checks rather than a direct import. That's my thoughts.
Aug 29, 2018
8
Level 3
.csv upload
I allow the user to map the fields in the csv file to my database fields, i then loop through the file and create a record for each record with eloquent. It takes quite a bit of time but want to use eloquent over directly importing via sql.
thoughts? suggestions?
while(! feof($file))
{
$lead_value = fgetcsv($file);
$lead = new Lead();
$nullCount = 0;
$failBool = false;
foreach ($fields as $key => $field_value) {
//lead validation
if($request["$field_value"] != "null" ){
if(is_array($lead_value) && array_key_exists((int)$request["$field_value"], $lead_value)){
if($field_value == "billing_state" || $field_value == "phone"){
if($field_value == "billing_state" && strlen($lead_value[(int)$request["$field_value"]]) >= 2) {
$lead["$field_value"] = $this->setStateAbbr($lead_value[(int)$request["$field_value"]]);
}
else{
if($field_value == "phone" && (int)($lead_value[(int)$request["$field_value"]]) >= 10 && is_numeric($lead_value[(int)$request["$field_value"]]+0)){
$lead["$field_value"] = $lead_value[(int)$request["$field_value"]];
}
else{
$lead["$field_value"] = null;
$failBool = true;
}
}
}
else $lead["$field_value"] = $lead_value[(int)$request["$field_value"]];
}
else{
$nullCount++;
}
}
else{
$nullCount++;
}
}
if(!$failBool){
$success++;
$lead->upload_id = $upload->id;
$lead->user_id = $user_id;
$lead->waiting_to_check = false;
if(isset($lead->phone) && is_numeric($lead->phone) && strlen($lead->phone) == 10) {
try {
$lead->save();
} catch (\Exception $e) {
// echo($e);
$failure++;
}
}else{
$lead->delete();
}
}
else{
$failure++;
}
}
Level 67
One way to speed it up is to do bulk inserts. Right now you're inserting each one individually. I'd insert 50 at a time (or more). You'd have to redo/restructure all of that in order to be able to do it though, but it would be a lot faster.
Lead::create([
[array of lead1 data],
[array of lead2 data],
// etc
]);
Please or to participate in this conversation.