2011-04-19 87 views
2

我有一個連接到CodeIgniter數據庫的問題。CodeIgniter和自動加載數據庫庫

在模型中,如果我做

$this->load->database(); 

然後查詢如

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

作品和返回數據。然而,當我刪除負載>數據庫線,並嘗試自動加載數據庫庫,在應用程序/配置/ autoload.php使用

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

,上面的查詢失敗。因爲它在我明確加載庫時起作用,所以它不是我的數據庫連接的問題。我使用CodeIgniter 2.0.2(最新版本)。

由於我的大部分頁面都使用數據庫,所以我想自動加載它以避免每個模型都需要加載它。我誤解了有關加載數據庫庫的文檔,或者我做錯了什麼?

+0

你能夠從控制器運行一個簡單的查詢嗎?它可能是你試圖做一些古怪的事情(我們沒有看到你的整個結構,或者文件的位置,所以我在這裏做出假設)。 – Jakub 2011-04-25 17:28:16

回答

0

我能想到的唯一的事情就是在您的application/config/database.php文件中,以下行設置爲false,而不是true。

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

其他一切看起來都不錯。

+1

剛剛檢查過,它被設置爲TRUE ...仍然沒有快樂,我害怕... – 2011-04-20 09:58:02

+1

我的建議是嘗試全新安裝,並查看是否修復了任何問題。自動加載數據庫庫,並做一個簡單的查詢。任何喜悅?你也可以嘗試在'config.php'文件中設置'threshold'作爲錯誤記錄到'4'並檢查日誌。 – Ross 2011-04-20 10:07:06

+0

嘗試了全新的安裝,它的工作原理:-)回到我原來的代碼,我已經追蹤了這個問題 - 我正在使用[this](http://codeigniter.com/wiki/Chuck_Son%27s_take/)技術來爲每個頁面添加一個頁眉和頁腳,出於某種原因,這似乎是搞砸了自動加載。我將不得不尋找其他方式來完成頁眉和頁腳的事情。非常感謝您的幫助! – 2011-04-20 10:36:21

1

這是我爲database.php從我的應用程序/ config /目錄

$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用戶指南和重讀在autoload.php文件中的註釋在配置目錄。

在礦井中的相關行寫着:

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

你應該加載DB庫,就像這樣:

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

+0

我比較他們和我是相同的 - 唯一的區別是我沒有加載form_validation庫。它工作,如果我手動加載數據庫庫,但如果我必須在每個模型中這樣做,那麼我不明白自動加載應該做什麼... – 2011-04-20 10:00:40

+0

@fishywebby您可以選擇加載它在自動加載器或通過$ this-> load-library('database');而不是$ this-> load-> database(); – AlunR 2011-04-26 12:31:30

+1

嘿@AlunR - 上下文需要在這裏澄清... fishwebby已經說** ** NEITHER **'$ this-> load-> database()'** NOR **'$ this-> load-> library ('數據庫')'是一個選項。我也有同樣的問題,我們不**想要在每個模型中手動加載數據庫。我們希望從'config/autoload.php'中** AUTOLOAD **,顯然** AUTOLOAD **不起作用。 **這是真正的問題所在。我們可以得到這個解決方案嗎? – 2012-07-24 19:34:41

3

這只是一個選擇,如果你仍然不能解決問題。只需擴展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類中。

希望它有幫助!

+0

像老闆一樣工作:) – Mego 2016-02-04 18:23:35

7

我知道我可能只是回答一個死的問題,但我有同樣的問題。

,如果使用的是Eclipse PDT或類似的IDE,並通過添加一些變量只是在構造函數之前獲得代碼完成,則自動加載不起作用修改了系統>核心> model.php

我不知道爲什麼,但事實是它不起作用。我將核心> model.php恢復爲原始和自動加載正常工作。我現在沒有自動加載,對於新的編碼器來說,它真的是一個糟糕的體驗。

如果您有解決方法,請發表評論。

+1

非常感謝!一直在撓我的腦袋現在... – DannyThunder 2013-07-09 11:06:43

+0

如果這回答了你的問題,你能接受嗎?這將是很好的,名譽點突出賞金問題方便! – shababhsiddique 2013-07-11 16:35:58

0

Shababhsiduque,

只是你,我們是對的,至少在我的情況!

讓ide工作的解決方法是在ANOTHER CI項目中創建引用變量。

這會使系統模型與當前項目保持一致,但會在另一個項目中對其進行修改。

然後將php構建路徑(project-> properties-> phpbuildpath)更改爲具有變量的項目。

請注意,這是Aptana Studio 3的設置。

爲我工作。