вставить пакет в codeigniter, если в конкретном столбце нет дубликатов - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть таблица в моей базе данных.Структура таблицы выглядит следующим образом:

enter image description here

Мне нужно вставить данные в эту таблицу в виде пакета, но избегать дублирования ввода (здесь дубликат означает то же самое комбинация intCampaignID и intMobileNumber ).

Ниже приведена функция вставки в моей модели

function addToCampaign($data){
    $voiceengine = $this->load->database('voiceengine', TRUE);
    $scheduleData = array();

    $mobiles = explode(',', $data['destinations']); 
    $mobilesData = array();
    foreach($mobiles as $mobile){    
        if (trim(strlen($mobile)) > 10)
            $mobile = substr(trim($mobile), -10); 
        else
            $mobile = trim($mobile);
        if(!in_array($mobile, $mobilesData)){
            array_push($mobilesData, $mobile);
        }  

    }

    foreach($mobilesData as $mobile){            

        $campaignData = array(
            'intCampaignID' => $data['campaign'],
            'intMobileNumber' => $mobile);                    

        array_push($scheduleData, $campaignData);
    } 
    $voiceengine->insert_batch('Voice.CampaignNumbers', $scheduleData);
}

Я не уверен, как это сделать.Я искал решение, но все решения избегают дублирования на основе ключа.Но эти поля не являются ключевыми, и я не имею права изменять структуру.Кто-нибудь, пожалуйста, помогите мне сделать это

ОБНОВЛЕНИЕ
Я обновил свою функцию в модели

function addToCampaign($data){
    $voiceengine = $this->load->database('voiceengine', TRUE);
    $scheduleData = array();

    $mobiles = explode(',', $data['destinations']); 
    $mobilesData = array();
    foreach($mobiles as $mobile){    
        if (trim(strlen($mobile)) > 10)
            $mobile = substr(trim($mobile), -10); 
        else
            $mobile = trim($mobile);
        if(!in_array($mobile, $mobilesData)){
            array_push($mobilesData, $mobile);
        }  

    }

    foreach($mobilesData as $mobile){ 
        $voiceengine->where('intCampaignID', $data['campaign']); 
        $voiceengine->where('intMobileNumber', $mobile);  
        $count = $voiceengine->count_all_results('Voice.CampaignNumbers');    // need a simple method  
        if($count <= 0)   {    

            $campaignData = array(
                'intCampaignID' => $data['campaign'],
                'intMobileNumber' => $mobile);                    

            array_push($scheduleData, $campaignData);
        }
    } 
    $voiceengine->insert_batch('Voice.CampaignNumbers', $scheduleData);
}  

Обновленная функция будет работать.Но я ищу простое решение

1 Ответ

0 голосов
/ 25 апреля 2018

Перед вставкой удалите дублирующиеся значения:

$scheduleData = array_map("unserialize", array_unique(array_map("serialize", $scheduleData)));

и затем запустите функцию insert_batch

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...