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