Преобразование объекта результата Mysql в ассоциативный массив (CodeIgniter) - PullRequest
9 голосов
/ 16 сентября 2010

Я пытаюсь получить запрос к базе данных, который является объектом, преобразованным в ассоциативный массив, чтобы я мог использовать его в классе календаря в codeigniter.

Это моя модель:

<?php

class Get_diary_model extends Model {

    function getAllDiaries($year,$month) {

        $data = $this->db->query("SELECT day AND entry FROM diary WHERE month=$month AND year=$year"); // the entries for the relevant month and year

        foreach($data->result_array() as $row) { // return result as assoc array to use in calendar
            echo $row['day'];
            echo $row['entry'];
        }

        return $data;
        }
    }

и вот ошибка, которую я получаю:

atal error: Cannot use object of type CI_DB_mysql_result as array in C:\wamp\www\mm\system\libraries\Calendar.php on line 219

Есть идеи?

Ответы [ 4 ]

6 голосов
/ 16 сентября 2010

Ознакомьтесь с этим видеоуроком, оно вам поможет -> http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-the-calendar-library/

Ваша модель должна выглядеть так:

    function getAllDiaries($year,$month)
    {
        $q = $this->db->query("SELECT day AND entry FROM diary WHERE month=$month AND year=$year");

        if($q->num_rows() > 0):
            foreach($q->result() as $row):
                $data[] = $row;
            endforeach;
            return $data;
        else:
            return false;
        endif;
    }

и ваш контроллер:

    function index($year = null, $month = null)
    {
        $this->load->model('Get_diary_model');

        if (!$year) {
            $year = date('Y');
        }
        if (!$month) {
            $month = date('m');
        }

        $data['calendar'] = $this->Get_diary_model->getAllDiaries($year, $month);
}
3 голосов
/ 16 сентября 2010

Проблема не в том, что вы используете result_array (), а в том, что вы позже возвращаете $ data напрямую. $ query = $ this-> db-> query (), затем используйте $ query-> result_array () в foreach. Затем вы можете вернуть $ data после создания его в foreach.

Другой ответ - многословный способ написать следующее:

function getAllDiaries($year,$month)
{
    $sql = "SELECT day AND entry FROM diary WHERE month=$month AND year=$year";
    return $this->db->query($sql)->result();
}

Но, конечно, это вернет массив объектов, а не многомерный массив.

2 голосов
/ 10 апреля 2015

Используйте ниже простой метод,

$query = $this->db->get_where('table', array('table_id' => $id));

        $queryArr = $query->result();        

        foreach ($queryArr[0] as $key=>$val)
        {
            $row[$key]=$val;
        }

print_r($row); //this will give associative array
0 голосов
/ 22 августа 2016

Вот решение для CodeIgniter-3

function getAllDiaries(){
    $query = $this->db->query("YOUR QUERY HERE");
    return $query->result('array');
}

OR

function getAllDiaries(){
    return $this->db->query("YOUR QUERY HERE")->result('array');
}

Примечание: Функция result () принимает в качестве параметра "массив" или "объект". По умолчанию это «объект»

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