//set all email in a array
$emails = array();
foreach ($data as $item) {
array_push($emails, $item['email']);
}
$exists_mail = array();
$subscribers = Subscriber::whereIn('email', $emails)
->where('mail_list_id', $this->id)
->pluck('email')
->toArray();
//get subscriber unique key
$subscriber_uid = array();
//get all field value
$total_field = array();
//bulk insert in subscribers table
$subscriberBatch = array();
foreach ($data as $item) {
if(!in_array($item['email'], $subscribers)){
$column['uid'] = uniqid();
$column['mail_list_id'] = $this->id;
$column['email'] = $item['email'];
$column['status'] = Subscriber::STATUS_SUBSCRIBED;
$column['subscription_type'] = Subscriber::SUBSCRIPTION_TYPE_IMPORTED;
array_push($subscriberBatch, $column);
array_push($subscriber_uid, $column['uid']);
$fieldKey['uid'] = $column['uid'];
foreach ($fields as $field) {
$fieldKey[Str::lower($field['tag'])] = $item[Str::lower($field['tag'])];
}
array_push($total_field, $fieldKey);
}
}
Subscriber::insert($subscriberBatch);
//bulk insert in subscriber fields table
$totalSubscriber = Subscriber::select('id')
->whereIn('uid', $subscriber_uid)
->get()
->toArray();
$fieldBatch = array();
foreach ($totalSubscriber as $index => $subscriber) {
$total_field[$index]['subscriber_id'] = $subscriber['id'];
}
foreach ($total_field as $item) {
foreach ($fields as $field) {
$fieldColumn['subscriber_id'] = $item['subscriber_id'];
$fieldColumn['field_id'] = $field['id'];
$fieldColumn['value'] = $item[Str::lower($field['tag'])];
array_push($fieldBatch, $fieldColumn);
}
}
SubscriberField::insert($fieldBatch);
Я удаляю код ниже и использую pluck
$subscribers = Subscriber::select('email')->whereIn('email', $emails)->where('mail_list_id', $this->id)->get();
//check exists mail in database
$exists_mail = array();
foreach ($subscribers as $item) {
$exists_mail[$item->email] = true;
}
Мы оптимизируем и можем удалить код ниже
foreach ($total_field as $item) {
foreach ($fields as $field) {
$fieldColumn['subscriber_id'] = $item['subscriber_id'];
$fieldColumn['field_id'] = $field['id'];
$fieldColumn['value'] = $item[Str::lower($field['tag'])];
array_push($fieldBatch, $fieldColumn);
}}
Нравится:
//bulk insert in subscriber fields table
$totalSubscriber = Subscriber::select('id')
->whereIn('uid', $subscriber_uid)
->get()
->toArray();
$fieldBatch = array();
foreach ($totalSubscriber as $index => $subscriber) {
//$total_field[$index]['subscriber_id'] = $subscriber['id'];
foreach ($fields as $field) {
$fieldColumn['subscriber_id'] = $subscriber['id'];
$fieldColumn['field_id'] = $field['id'];
$fieldColumn['value'] = $item[Str::lower($field['tag'])];
array_push($fieldBatch, $fieldColumn);
}
}
Но я не знаю, какой тип данных в массиве $ fields Если вы предоставите массив полей, я постараюсь более оптимизировать.