CodeIgniter и автозагрузка библиотеки базы данных - PullRequest
2 голосов
/ 19 апреля 2011

У меня проблема с подключением к базе данных с помощью CodeIgniter.

В модели, если я делаю

$this->load->database();

затем запрос, такой как

$query = $this->db->get('articles', 10);

работает и возвращает данные. Однако, когда я удаляю строку загрузки-> базы данных и пытаюсь загрузить библиотеку базы данных, используя

$autoload['libraries'] = array('database');

в application / config / autoload.php, приведенный выше запрос не выполняется. Как это работает, когда я явно загружаю библиотеку, это не проблема с моим подключением к базе данных. Я использую CodeIgniter 2.0.2 (текущий последний выпуск).

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

Ответы [ 7 ]

7 голосов
/ 02 ноября 2012

Я знаю, что, вероятно, просто отвечаю на пустой вопрос, но у меня была такая же проблема.

если вы используете eclipse pdt или аналогичную IDE и изменили system> core> model.php, добавив несколько переменных непосредственно перед конструктором, чтобы получить завершение кода, то автозагрузка не работает

Я не знаю почему, но на самом деле это не работает. Я восстановил файл core> model.php до оригинального и автозагрузка работает нормально. Я не получаю автозагрузку, и это действительно плохой опыт для нового кодировщика CI.

Если у вас есть обходной путь, пожалуйста, прокомментируйте так.

4 голосов
/ 20 апреля 2012

Это просто альтернатива, если вы все еще не можете решить проблему. Просто расширьте CI_Model и автоматически загрузите библиотеку базы данных в конструкторе. Тогда вы можете просто сделать все остальные модели наследуемыми от этого базового класса.

Пример:

<?php 
    class My_Model extends CI_Model{
        public function __construct(){
            parent::__construct();
             $this->load->database();
         }
     }

А все остальные начнут как:

  <?php
       class Some_Model extends MY_Model{}

Этот метод имеет другое преимущество: вам не нужно включать строку кода загрузки в каждую создаваемую вами модель. Также вы можете легко вставить общие функции между моделями в родительский класс MY_Model.

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

1 голос
/ 19 апреля 2011

Это мой database.php из моего приложения / config / directory

$active_group = 'default';   
$active_record = TRUE;        
$db['default']['hostname'] = 'mydbhost';   
$db['default']['username'] = 'myusername';    
$db['default']['password'] = 'mypassword';    
$db['default']['database'] = 'mydatabase'; 
$db['default']['dbdriver'] = 'mysql';    
$db['default']['dbprefix'] = '';    
$db['default']['pconnect'] = TRUE;    
$db['default']['db_debug'] = TRUE;   
$db['default']['cache_on'] = FALSE;   
$db['default']['cachedir'] = '';    
$db['default']['char_set'] = 'utf8';    
$db['default']['dbcollat'] = 'utf8_general_ci';    
$db['default']['swap_pre'] = '';    
$db['default']['autoinit'] = TRUE;    
$db['default']['stricton'] = FALSE;

Проверьте, как выглядит ваш файл, перезапустите руководство пользователя на http://codeigniter.com/user_guide/database/configuration.html и перечитайте комментарии в автозагрузке.Файл .php в директории config.

Соответствующая строка в моем файле гласит:

$autoload['libraries'] = array('database', 'form_validation', 'session');

Вы должны загрузить библиотеку db следующим образом:

$this->load->library('database');

0 голосов
/ 19 ноября 2018

В моем случае проблема заключалась в том, что в том же файле было другое вхождение $autoload['libraries'], и он сбрасывал массив.

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

В этом случае вы можете попробовать функцию PHP Autoload Class Magic.

    function __autoload($class)
{
    if(strpos($class, 'CI_') !== 0)
    {
        @include_once( APPPATH . 'libraries/'. $class . '.php' );
    }
}

Этот код должен быть скопирован в config.php (после последней строки) в папке приложения.

Этот код автоматически загружает библиотеки для вас, когда это необходимо.

Может работать.Удачного кодирования.

0 голосов
/ 12 мая 2013

Shababhsiduque,

Только ты прав, по крайней мере, в моем случае!

Обходной путь для получения идеи для работы - создание ссылочных переменных в проекте ДРУГОЙ CI.

То есть оставить модель системы такой же, как в текущем проекте, но изменить ее в другом проекте.

Затем измените php buildpath (project-> properties-> phpbuildpath) на проект с переменными.

Обратите внимание, что это настройки для Aptana Studio 3.

работал для меня.

0 голосов
/ 19 апреля 2011

Единственное, о чем я могу думать, это в вашем файле application/config/database.php, следующая строка установлена ​​в false, а не в true.

//['autoinit'] Whether or not to automatically initialize the database.
$db['default']['autoinit'] = TRUE;

Все остальное выглядит хорошо.

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