2014-09-01 2 views
1

Эта функция мой контроллерполучаю ошибку при прохождении массива через петлю

public function update_monthly() { 
     $data = $this->student_model->get_due_info(); 

     foreach ($data as $value) { 
      $due = $this->student_model->get_due_by_id($value); 
      $grade = $this->student_model->get_grade_by_id($value); 
      $grade_due = $this->student_model->get_due_by_grade($grade); 
      $new_due = $due + $grade_due; 
      $this->db->set('md_due',$new_due, FALSE); 
     } 
    } 

Я получаю следующее сообщение об ошибке

A PHP Error was encountered 

    Severity: Notice 

    Message: Array to string conversion 

    Filename: database/DB_active_rec.php 

    Line Number: 427 

и

A Database Error Occurred 

Error Number: 1054 

Unknown column 'Array' in 'where clause' 

SELECT `md_due` FROM (`monthly_due`) WHERE `md_student_id` = Array 

Filename: F:\xampp\htdocs\student\system\database\DB_driver.php 

Line Number: 330 

Код модели

public function get_due_by_id($id) { 
     $this->db->select('md_due'); 
     $this->db->from('monthly_due'); 
     $this->db->where('md_student_id', $id); 
     $query = $this->db->get(); 
     return $query->result_array(); 
    } 

    public function get_due_by_grade($id) { 
     $this->db->select('dt_fee'); 
     $this->db->from('due_table'); 
     $this->db->where('dt_grade', $id); 
     $query = $this->db->get(); 
     return $query->result_array(); 
    } 

    public function get_grade_by_id($id) { 
     $this->db->select('grade'); 
     $this->db->from('student_info'); 
     $this->db->where('student_gen_id', $id); 
     $query = $this->db->get(); 
     return $query->result_array(); 
    } 
    public function get_due_info() { 

     $this->db->select('md_student_id'); 
     $this->db->from('monthly_due'); 

     $query = $this->db->get(); 
     return $query->result_array(); 
    } 
+1

Поскольку CI Active Record возвращает ассоциативный массив, пожалуйста, измените '$ из-за = $ this-> student_model-> get_due_by_id ($ значение);' до $ из-за = '$ this-> student_model-> get_due_by_id ($ значение [ ARRAY_INDEX | COLUMN NAME]); ' –

+0

Можете ли вы вставить здесь код модели? – mrsrinivas

+0

Это происходит потому, что вам нужно передать идентификатор для вашей модели get_due_by_id function.If вы возвращаете объект массива используйте get_due_by_id ($ значения [ «id_col_name»]) или если вы возвращаете объект StdClass затем использовать get_due_by_id ($ значения -> id_col_name) Не стесняйтесь, дайте мне знать, если есть сомнения. – Zeeshan

ответ

0

Провод $value['md_student_id'] к модели вместо $value в контроллере.

$data = $this->student_model->get_due_info(); 
foreach ($data as $value) { 
    $due = $this->student_model->get_due_by_id($value['md_student_id']); 
    $grade = $this->student_model->get_grade_by_id($value['md_student_id']); 
    $grade_due = $this->student_model->get_due_by_grade($grade[0]['grade']); 
    //Add remaining logic 
} 
0

вы передаете весь массив в модели не только значение, которое вы хотите

$due = $this->student_model->get_due_by_id($value); 

правильно, чтобы пройти

$value['md_student_id'] 

это значение, которое вы на самом деле хотите передать

замените ваш код на это

foreach ($data as $value) { 
      $due = $this->student_model->get_due_by_id($value['md_student_id']); 
      $grade = $this->student_model->get_grade_by_id($value['md_student_id']); 
      $grade_due = $this->student_model->get_due_by_grade($grade[0]['grade']); 
      $new_due = $due + $grade_due; 
      $this->db->set('md_due',$new_due, FALSE); 
     } 
+0

в соответствии с @mudasser Ali I попробовал это решение, и оно не сработало. –

+0

только echo $ value [0] ['md_student_id'], прежде чем вы назовете вашу модель, чтобы вы не указали, что ваш id не является массивом –

+0

@HossamAldeenAhmed: Почему вы думаете '$ value [0] ['md_student_id']' only ?? – mrsrinivas

Смежные вопросы