Как вставить несколько строк данных, некоторые из которых имеют многомерные массивы - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь вставить несколько строк данных из полей select2. Некоторые из полей в строках могут иметь несколько вариантов выбора. Мой код работает только с одной строкой данных и одним полем с несколькими вариантами выбора, как показано на рисунке ниже. Но с несколькими строками вставка работает не так, как ожидалось. Пожалуйста, ребята, мне нужна ваша помощь.

public function save_staff()
{
$subjects = count($this->input->post('subject'));
   $names = count($this->input->post('names'));
  if($names > 0){
    for($i=0; $i < $names; $i++){

         for($p=0; $p < $subjects; $p++){

    $names_array = array(
        'names' => $this->input->post('names')[$i],
        'sign' => $this->input->post('sign')[$i],
        'subject' => $this->input->post('subject')[$p]

    );
    $this->db->insert($this->table, $names_array);

}
}

Screenshot of insertion form

Приведенный выше код работает только с одной строкой данных. И данные в базе данных нормализуются, как показано на втором изображении. Screenshot of inserted data. Добавляя другую строку данных с одним полем, имеющим несколько вариантов выбора, как первое, мой код не может это обработать. Как я могу настроить код, чтобы получить его правильно? На третьем изображении показан скриншот того, что мой код не может обработать. screenshot of scenario that my code can't handle

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Попробуйте сделать это на вашем входе:

<select name="subject[][]" class="form-control selectpicker" multiple>

Контроллер:

$a1 = $this->input->post('subject');
$count1 = count($a1);

for ($i=0; $i < $count1 ; $i++) {

        $count2 = count($a1[$i]);

        if(!empty($count2)){
            for ($j=0; $j < $count2 ; $j++) {
                $names_array = array(
                    'subject' => $a1[$i][$j]

                );
            $this->db->insert($names_array);
            }
        }
    }
0 голосов
/ 14 января 2019

как выглядит функция $ this-> db-> insert ()?

вам, вероятно, потребуется переформатировать его, чтобы выполнить следующее:

INSERT INTO  table_name
(
    col_1,
    col_2,
    col_3
)
VALUES
(                    <--- first record being added
    'test',
    'someValue',
    2
),
(                   <--- second record being added
    'test_theSecond',
    'someValue',
    1234
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...