如何在Codeigniter的单独类函数中执行SQL Query

时间:2014-01-07 15:52:24

标签: php mysql sql codeigniter

我是CodeIgniter的新手。我想在单独的类函数中执行所有数据库查询只是为了重用能力。 与JAVA spring框架中的相同。

示例:我需要不同控制器中所有用户的列表。为此,在单独的类函数中编写了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...';
    }
}

它工作正常。

2 个答案:

答案 0 :(得分:4)

首先,静态方法没有任何可用的CI内容。因此,使用数据库执行某些操作将无法正常工作。其次,CI中的控制器通常映射到URI,因此最好只使用这种方式。

如果您有一些可重复使用的代码,那么您需要创建帮助程序或库。您将它们存储在单独的文件夹中,然后可以加载库,例如,$this->load->library('class_name');,然后像这样访问它们:$this->class_name->method();

但这并不适用于您的数据库。数据访问由您的模型处理( duh )。您可以使用与库非常相似的方式创建它们,并且在CI文档中对它进行了很好的解释,您应该阅读:http://ellislab.com/codeigniter/user-guide/index.html

答案 1 :(得分:2)

最后我找到了解决方案。我们如何在CodeIgniter库中执行SQL查询

以下是我的CodeIgniter库类的代码

<?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);       
    }
}

这是我的CodeIgniter控制器类

<?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 ....
    }   
}

我发布了它是因为。可能对其他人有帮助