我正在使用CI网站,MS SQL数据库和CRUD操作要求我在实际运行操作之前运行一些查询。
$this->db->query('SET ANSI_NULLS ON;');
$this->db->query('SET QUOTED_IDENTIFIER ON;');
$this->db->query('SET CONCAT_NULL_YIELDS_NULL ON;');
$this->db->query('SET ANSI_WARNINGS ON;');
$this->db->query('SET ANSI_PADDING ON;');
我想知道我是否可以种植这些植物以便它们always
运行?
现在,我将它们放入我的模型中__construct()
答案 0 :(得分:4)
您可以创建一个自定义模型类,然后可以在模型中进行扩展。
应用/核心/ MY_Model.php
class MY_Model extends CI_Model{
function __construct(){
parent::__construct();
$this->db->query('SET ANSI_NULLS ON;');
$this->db->query('SET QUOTED_IDENTIFIER ON;');
$this->db->query('SET CONCAT_NULL_YIELDS_NULL ON;');
$this->db->query('SET ANSI_WARNINGS ON;');
$this->db->query('SET ANSI_PADDING ON;');
}
}
应用/模型/ some_model.php
class Some_model extends MY_Model{
function __construct(){
parent::__construct();
}
function some_function(){
//interact with db
}
}
答案 1 :(得分:1)
您可以创建数据库驱动程序扩展,并将这些查询放在重写的查询方法中。您首先必须创建一个加载器扩展来实现这一点,因为codeigniter在加载时不会检查自定义DB_drivers。像这样:
在application / core / MY_Loader.php中创建一个文件
<?php
class MY_Loader extends CI_Loader {
/**
* Database Loader
*
* @access public
* @param string the DB credentials
* @param bool whether to return the DB object
* @param bool whether to enable active record (this allows us to override the config setting)
* @return object
*/
function database($params = '', $return = FALSE, $active_record = FALSE)
{
// Do we even need to load the database class?
if (class_exists('CI_DB') AND $return == FALSE AND $active_record == FALSE)
{
return FALSE;
}
require_once(BASEPATH.'database/DB'.EXT);
// Load the DB class
$db =& DB($params, $active_record);
$my_driver = config_item('subclass_prefix').'DB_'.$db->dbdriver.'_driver';
$my_driver_file = APPPATH.'libraries/'.$my_driver.EXT;
if (file_exists($my_driver_file))
{
require_once($my_driver_file);
$db =& new $my_driver(get_object_vars($db));
}
if ($return === TRUE)
{
return $db;
}
// Grab the super object
$CI =& get_instance();
// Initialize the db variable. Needed to prevent
// reference errors with some configurations
$CI->db = '';
$CI->db = $db;
// Assign the DB object to any existing models
$this->_ci_assign_to_models();
}
}
在application / core / MY_DB_mssql_driver中创建另一个文件:
<?php
class MY_DB_mssql_driver extends CI_DB_mssql_driver {
function __construct($params){
parent::__construct($params);
log_message('debug', 'Extended DB driver class instantiated!');
}
function query($sql, $binds = FALSE, $return_object = TRUE){
parent::query('SET ANSI_NULLS ON;');
parent::query('SET QUOTED_IDENTIFIER ON;');
parent::query('SET CONCAT_NULL_YIELDS_NULL ON;');
parent::query('SET ANSI_WARNINGS ON;');
parent::query('SET ANSI_PADDING ON;');
return parent::query($sql, $binds, $return_object);
}
}
现在每次使用$this->db->query
时,它都会调用这些查询。
但是,如果您不希望在每次查询调用时执行此操作,而不是覆盖query
方法,请覆盖initialize
方法,如:
function initialize(){
if (parent::initialize() === TRUE) {
parent::query('SET ANSI_NULLS ON;');
parent::query('SET QUOTED_IDENTIFIER ON;');
parent::query('SET CONCAT_NULL_YIELDS_NULL ON;');
parent::query('SET ANSI_WARNINGS ON;');
parent::query('SET ANSI_PADDING ON;');
}
}