Codeigniter - вставка данных в MySQL, где только одно из входных значений является массивом - PullRequest
0 голосов
/ 19 мая 2018

Я изучаю Codeigniter и поражаюсь некоторой турбулентностью.Одно из моих полей ввода собирает массив значений (из флажков), в то время как остальные являются отдельными значениями.Я хотел бы вставить данные в MySQLi таким образом, чтобы количество вставленных строк равнялось количеству значений в массиве.Это выглядит так:

Мой контроллер:

 function request_rooms() {     
      if ($_POST) {
        //room is an array or one or more values
        $this->form_validation->set_rules('room[]', 'Select Box', 'trim|required|min_length[1]|max_length[25]'); 
        $this->form_validation->set_rules('guest_id', 'Guest ID', 'trim|required|xss_clean|min_length[4]|max_length[20]');
         $this->form_validation->set_rules('date_in', 'Check-in Date', 'trim|required|exact_length[10]'); 
        $this->form_validation->set_rules('date_out', 'Check-out Date', 'trim|required|exact_length[10]'); 

        if ($this->form_validation->run($this) == FALSE) {
            $somedata = array('errors' => validation_errors());
            $this->session->set_flashdata($somedata);
            require("includes/load_view_reservation.php");
          } else {
               //Prepare data to send to Reservation model
               $data = array( 
               'room_no'  = ?
               'guest_id' = $this->input->post('guest_id'),
               'check_in' = $this->input->post('check_in'),
               'check_in' = $this->input->post('check_in')

             $this->reservation_model->insert_reservation($data);
              }       
       }
}

Проблема: Моя проблема в том, как обрабатывать массив комнат.Я хочу создать массив $ data для данных, которые будут вставлены в базу данных.Предположим, что вход массива комнат ($ this-> input-> post ('room []')) выглядит следующим образом:

$room = array(42, 123, 16);

Я бы хотел, чтобы массив $ data был таким:

 $data = array
  (
  array(
  "room_no" => "42",
  "guest_id" => "2",
  "date_in" => "2018-05-20",
  "date_out" => "2018-05-27"
  ),
  array(
  "room_no" => "123",
  "guest_id" => "2",
  "date_in" => "2018-05-20",
  "date_out" => "2018-05-27" ),
  array(
  "room_no" => "16",
  "guest_id" => "2",
  "date_in" => "2018-05-20",
  "date_out" => "2018-05-27" )
  );

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

Вопрос:

Как создать многомерный массив, как описано выше в Codeigniter?Во-вторых, пока что я вставил (в MySQL) только простой одномерный массив с использованием модели Codeigniter.Как мне вставить многомерный массив, как показано выше?Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Надеюсь, это поможет вам:

Первый метод вставка индивидуальной записи;

//$rooms = $this->input->post('room');
$rooms = array(42, 123, 16);
if ( ! empty($rooms))
{
  foreach($rooms AS $room)
  {
    $data['room_no'] = $room;
    $data['guest_id'] = $this->input->post('guest_id');
    $data['check_in'] = $this->input->post('check_in');

    $this->reservation_model->insert_reservation($data);
  }
}

Ваша модельметод insert_reservation должен быть таким:

public function insert_reservation($data)
{
   return $this->db->insert('table_name',$data);
}

Второй метод вставить несколько (пакетную) запись;

//$rooms = $this->input->post('room');
$rooms = array(42, 123, 16);
if( ! empty($rooms))
{
   foreach($rooms AS $room)
   {
      $data[] = [
            'room_no' => $room,
            'guest_id' => $this->input->post('guest_id'),
            'check_in' => $this->input->post('check_in'),
        ];
   }
}
//print_r($data);
$this->reservation_model->insert_reservation($data);

В этомЕсли ваш метод модели insert_reservation должен выглядеть следующим образом:

public function insert_reservation($data)
{
   return $this->db->insert_batch('table_name',$data);
}

Для более подробной информации: https://www.codeigniter.com/user_guide/database/query_builder.html#inserting-data

0 голосов
/ 19 мая 2018

выглядит не так уж сложно, просто итерируйте по вашему массиву

что-то вроде следующего должно сделать эту работу.

$room = array(42, 123, 16);

$arrData = [];

foreach($room AS $roomNo)
{
    $arrData[] = [
        'room_no' => $roomNo,
        'guest_id' => $this->input->post('guest_id'),
        'check_in' = $this->input->post('check_in'),
        'check_in' = $this->input->post('check_in')
    ];
}

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