2016-10-18 2 views
0

Я пытаюсь вставить массив в качестве строки в таблицу «затраты» на моей БД:CodeIgniter insert_batch: Поле «exp_user» не имеет значения по умолчанию

public function insert_expense($expenses){ 
    $this->db->insert_batch('expenses', $expenses); 
} 

и я получаю эту ошибку :

A Database Error Occurred
Error Number: 1364
Field 'exp_user' doesn't have a default value
INSERT INTO expenses () VALUES(),(),(),(),(),(),(),(),(),(),(),()
Filename: models/Expenses_model.php
Line Number: 26

Это структура моего стола:

enter image description here

И это пример того, что я пытаюсь вставить:

array(12) { 
    ["exp_user"] "1" 
    ["exp_date"] "2016-10-18" 
    ["exp_date_request"] "2016-10-18" 
    ["exp_client"] "Potato" 
    ["exp_provider"] "Miew" 
    ["exp_amount"] "1" 
    ["exp_currency"] "₪" 
    ["exp_budget"] "budget2" 
    ["exp_method"] "cc" 
    ["exp_frequency"] "Monthly" 
    ["exp_expenditure"] "asdasdas asdas dsa as" 
    ["exp_charge_client"] NULL 
} 
+1

вы можете показать расходы массив? –

ответ

2

В случае переменная $expenses является массив, который вы имеете в вашем примере:

$expenses = array(
    "exp_user" => "1", 
    "exp_date" => "2016-10-18", 
    "exp_date_request" => "2016-10-18", 
    "exp_client" => "Potato", 
    "exp_provider" => "Miew", 
    "exp_amount" => "1", 
    "exp_currency" => "₪", 
    "exp_budget" => "budget2", 
    "exp_method" => "cc", 
    "exp_frequency" => "Monthly", 
    "exp_expenditure" => "asdasdas asdas dsa as", 
    "exp_charge_client" => NULL 
); 

Вы не можете использовать его в insert_batch (поскольку функция insert_batch ожидает получить массив массивов (данных) в качестве второго параметра).

В принципе функция insert_batch дает вам возможность вставлять несколько строк (без перегиба по функции insert). Вы можете просто использовать многомерный массив для этого:

$expenses = array(
    array(
     "exp_user" => "1", 
     "exp_date" => "2016-10-18", 
     "exp_date_request" => "2016-10-18", 
     "exp_client" => "Potato", 
     "exp_provider" => "Miew", 
     "exp_amount" => "1", 
     "exp_currency" => "₪", 
     "exp_budget" => "budget2", 
     "exp_method" => "cc", 
     "exp_frequency" => "Monthly", 
     "exp_expenditure" => "asdasdas asdas dsa as", 
     "exp_charge_client" => NULL 
    ), 
    array(
     "exp_user" => "1", 
     "exp_date" => "2016-10-18", 
     "exp_date_request" => "2016-10-18", 
     "exp_client" => "Potato", 
     "exp_provider" => "Miew", 
     "exp_amount" => "1", 
     "exp_currency" => "₪", 
     "exp_budget" => "budget2", 
     "exp_method" => "cc", 
     "exp_frequency" => "Monthly", 
     "exp_expenditure" => "asdasdas asdas dsa as", 
     "exp_charge_client" => NULL 
    ), 
    array(
     "exp_user" => "1", 
     "exp_date" => "2016-10-18", 
     "exp_date_request" => "2016-10-18", 
     "exp_client" => "Potato", 
     "exp_provider" => "Miew", 
     "exp_amount" => "1", 
     "exp_currency" => "₪", 
     "exp_budget" => "budget2", 
     "exp_method" => "cc", 
     "exp_frequency" => "Monthly", 
     "exp_expenditure" => "asdasdas asdas dsa as", 
     "exp_charge_client" => NULL 
    ) 
); 

А теперь имеет смысл использовать insert_batch.

Если у вас есть только 1 запись, которую хотите вставить Вы можете использовать функцию insert:

$this->db->insert('expenses', $expenses); 

Или изменить вызов:

$this->db->insert_batch('expenses', array($expenses)); 
Смежные вопросы