Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Codeigniter的分离类函数中执行SQL查询_Php_Mysql_Sql_Codeigniter - Fatal编程技术网

Php 如何在Codeigniter的分离类函数中执行SQL查询

Php 如何在Codeigniter的分离类函数中执行SQL查询,php,mysql,sql,codeigniter,Php,Mysql,Sql,Codeigniter,我是CodeIgniter的新手。我想在一个单独的类函数中执行所有数据库查询,只是为了提高重用能力与JAVA spring框架中的相同。 示例:我需要不同控制器中所有用户的列表。为此,在单独的类函数中编写了getAllUser()的查询。之后,我可以从不同的控制器调用它 这是我试图实现我的目标的一段代码 这将是我的服务课 class UserManagementServices extends CI_Controller { public static function getAl

我是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...';
    }
}

而且它工作得很好。

首先,静态方法没有任何可用的CI内容。因此,从那里开始,对DB做一些事情是行不通的。其次,CI中的控制器通常映射到URI,因此最好仅以这种方式使用它们

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


但这不适用于您的数据库。数据访问由您的模型(duh)处理。您以与库非常相似的方式创建它们,CI文档对此进行了很好的解释,您应该阅读:

最终我找到了解决方案。如何在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);       
    }
}

这就是模型的用途。将它们放入模型中,而不是控制器中。在这种情况下我能做什么。如果我的查询包含多个联接
SELECT*FROM USER,USER\u LOG,USER\u ROLE,COUNTRY,CITY WHERE USER.USER\u ID=USER\u LOG.USER\u ID和USER.USER\u ID=USER\u ROLE.USER\u ID和USER.CITY\u ID=CITY.CITY\u ID和CITY.COUNTRY\u ID=COUNTRY.COUNTRY\u ID
创建一个模型函数来运行该查询吗?我不明白你在问什么。我用两种方法加载库中的数据库
$this->load->Library('database')
$this->load->database()但它不工作。
<?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 ....
    }   
}