Как разбить значения в массиве и на отдельные столбцы, создав его динамически с помощью codeigniter - PullRequest
0 голосов
/ 03 апреля 2020
public function addDynFields()
{
    $checkedfileds=$_POST['CheckedFileds'];
    $fields=implode(',',$checkedfileds);
    $dynflds = strtolower($fields);
    $dynclmns = 'add_to'.'_'.$dynflds;
    if($fields == 'Title')
    {
        $this->db->query("ALTER TABLE `pm1asset_dynamic_fields` ADD ".$dynclmns." int(11) NOT NULL");
    }
    else
    {
        $this->db->query("ALTER TABLE `pm1asset_dynamic_fields` ADD ".$dynclmns." varchar(255) NOT NULL");
    }
}

Здесь выше код является кодом контроллера. Здесь $checkedfileds - это несколько значений флажка в виде массива. Здесь я хочу взорвать значения $checkedfileds(Array) и сохранить их в виде отдельных столбцов в таблице.

Если я включу $checkedfileds в $this->db->query("ALTER TABLE pm1asset_dynamic_fields ADD ".$checkedfileds." varchar(255) NOT NULL");, он будет создан как массив в качестве имени столбца в таблице, предположим, если я включу $dynclmns в $this->db->query("ALTER TABLE pm1asset_dynamic_fields ADD ".$dynclmns." varchar(255) NOT NULL");, он будет создан как add_to_title, но следующий столбец будет не создан, я не знаю, почему он не собирается создавать. Может ли кто-нибудь, пожалуйста, помогите мне ..

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Попробуйте восстановить синтаксис запроса sql и измените ваши коды следующим образом:

$checkedfileds = $_POST['CheckedFileds'];
$qry = "ALTER TABLE `pm1asset_dynamic_fields` ";
foreach ($checkedfileds as $key => $value) {
    $dynflds = strtolower($value);
    $dynclmns = 'add_to' . '_' . $dynflds;
    if ($value == 'Title') {
        $qry .= "ADD COLUMN `" . $dynclmns . "` int(11) NOT NULL";
    } else {
        $qry .= "ADD COLUMN `" . $dynclmns . "` varchar(255) NOT NULL";
    }
    end($checkedfileds);
    // use (;) for the last row, otherwise use (,)
    if ($key === key($checkedfileds)) {
        $qry .= ";";
    } else {
        $qry .= ", ";
    }
}
$this->db->query($qry);

Это сгенерирует запрос, как показано ниже:

ALTER TABLE `pm1asset_dynamic_fields` 
ADD COLUMN `add_to_title` int(11) NOT NULL,
ADD COLUMN `add_to_col2` varchar(255) NOT NULL,
ADD COLUMN `add_to_col3` varchar(255) NOT NULL;
0 голосов
/ 03 апреля 2020

Попробуйте добавить varchar(255) к каждому столбцу

$input=$_POST['CheckedFileds'];
$checkedfileds = array_map(function($value) { return $value." varchar(255)"; }, $input);
$fields=implode(',',$checkedfileds);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...