Связать модель с запросом результата в CodeIgniter? - PullRequest
0 голосов
/ 24 сентября 2011

Вот что написано в их документации

Вы также можете передать строку в result (), которая представляет класс для создания экземпляра для каждого объекта результата (примечание: этот класс должен быть загружен)

$query = $this->db->query("SELECT * FROM users;"); 
foreach ($query->result('User') as $user) {    
    echo $row->name; // call attributes    
    echo $row->reverse_name(); // or methods defined on the 'User' class 
}

Несмотря на то, что они отображают $ row вместо $ user ... мне кажется, это не работает.Вот моя версия тестирования

Модель

class User extends CI_Model{
    var $first;
    var $last;
..  
    function getName() {
        return $this->first + " " + $this->last;
    }
}   

Контроллер

class Tester extends CI_Controller {

     public function index() {
          $this->load->model('User');
          $query = $this->db->query('SELECT * from USERS');
          $data = array (
              'regular' => $query->result(),
              'modeled' => $query->result('User')
          );
          $this->load->view('test', $data);
     }
}

Просмотр

foreach ($regular as $row) {
    echo "{$row->FIRST} {$row->LAST} <BR/>";
}

echo "<br/>";

foreach ($modeled as $row) {
    echo "{$row->getName()} <BR/>";
}

Есть ли что-то, что яделать неправильно или недоразумение?Я бы предположил, что на основании их документации, что если я назначу класс для набора результатов, класс должен быть заполнен результатами?Теперь, как это происходит, зная, какое поле сопоставить, для меня загадка и вполне может быть причиной, почему это не работает.Я подумал, что, возможно, мне нужно изменить конструктор, чтобы сделать это отображение, но я не видел никакой документации о том, как мне поступить.Я попытался ввести параметр для конструктора, предполагая, что это массив StdClass, но, похоже, он не работал.

Любые разъяснения были бы великолепны!

1 Ответ

0 голосов
/ 24 сентября 2011

Поэтому меня осенило, чтобы я проверил фактический исходный код функции db_results, и я решил, что это связано со случаем столбцов результата запроса. И кажется, что CI по умолчанию все использует UPPERCASE, если вы не укажете его в нижнем регистре в строке запроса.

Итак, в заключение, какой бы ни был столбец в вашем запросе, это должен быть случай значений в вашей Модели!

Хотя это кажется смешным ... Я, наверное, посмотрю, смогу ли я отредактировать базовый класс, чтобы он не учитывал регистр. Если у кого-то нет лучших альтернатив.

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