2014-01-07 35 views
1

我是CodeIgniter中的新成員。我想在一個單獨的類函數中執行所有數據庫查詢,只是爲了重用能力。 與JAVA春季框架相同。如何在Codeigniter的獨立類函數中執行SQL查詢

例如:我需要不同控制器中所有用戶的列表。爲此,在單獨的Class Function中寫入getAllUser()的查詢。從那以後,我可以從不同的控制器

這是一段代碼,我想實現我的目標稱之爲

這將是我服務類

class UserManagementServices extends CI_Controller { 
    public static function getAllUsers(){ 
     $this->load->database(); 
     return $this->db->query("SELECT * FROM users"); 
    } 
    public static function getUser($userId){ ... } 
    public static function removeUser($userId){ ... } 
    public static function getUserHistory($userId){ ... } 
} 

這將是我的控制器類

class User extends CI_Controller { 
    public function index(){ 
     $this->load->view('userHome'); 
    } 
    public function viewAllUser(){ 
     include 'application/controllers/UserManagementService.php'; 
     var_dump(UserManagementService::getAllUsers()); 
    } 
} 

但是這段代碼不起作用。

在CodeIgniter它不允許我在靜態方法中執行查詢。 當我想這

class UserManagementServices extends CI_Controller { 
    public static function getAllUsers(){ 
     return 'Testing Purpose...'; 
    } 
} 

,它工作正常。

+0

這是模型的用途。把這些放入模型中,而不是控制器。 http://ellislab.com/codeigniter/user-guide/general/models.html –

+0

我可以在這種情況下做什麼。如果我的查詢包含多個聯接 'SELECT * FROM USER,USER_LOG,USER_ROLE,國家,城市 WHERE USER.USER_ID = USER_LOG.USER_ID AND USER.USER_ID = USER_ROLE.USER_ID AND USER.CITY_ID =城市。CITY_ID AND CITY.COUNTRY_ID = COUNTRY.COUNTRY_ID' – UFFAN

+0

建立模型函數以運行該查詢?我不明白你在問什麼。 –

回答

1

最後我找到了解決方案。我們如何可以執行SQL查詢笨庫

裏面以下是我笨庫類

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 
class UserManagementService { 
    private $ciInstance; 
    function __construct(){ 
     $this->ciInstance =& get_instance(); 
     $this->ciInstance->load->database(); 
    } 
    public function getAllUsers(){ 
     $query ="SELECT * FROM USERS"; 
     return $this->ciInstance->db->query($query);  
    } 
} 

的代碼這是我笨控制器類

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 
class Home extends CI_Controller { 
    public function index(){ ... } 
    public function viewAllUsers(){ 
     // .... some piece of code here .... 
     $this->load->library('usermanagementservice'); 
     $users = $this->usermanagementservice->getAllUsers(); 
     // .... some piece of code here .... 
    } 
} 

我張貼,因爲。可能會對別人有幫助

4

首先,靜態方法沒有任何CI可用的東西。因此,使用數據庫做一些事情將不會從那裏開始。其次,CI中的控制器通常映射到URI,所以最好僅以這種方式使用它們。

如果你有一些可重用的代碼,那麼創建一個幫助程序或庫就是你需要的。您將它們存儲在單獨的文件夾中,然後可以加載庫,例如,如下所示:$this->load->library('class_name');然後像這樣訪問它們:$this->class_name->method();

雖然這不適用於您的數據庫。數據訪問由您的模型處理(duh)。您可以使用與庫類似的方式創建它們,並在CI文檔中對此進行了很好的說明,您應該閱讀:http://ellislab.com/codeigniter/user-guide/index.html

+0

我在庫'$ this-> load-> library('database');'和'$ this-> load-> database();'中使用了兩種方法來加載數據庫,但它不起作用。 – UFFAN