我是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...';
}
}
它工作正常。
答案 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 ....
}
}
我发布了它是因为。可能对其他人有帮助