CodeIgniter Helper Functions 可以使用数据库函数吗?

Posted

技术标签:

【中文标题】CodeIgniter Helper Functions 可以使用数据库函数吗?【英文标题】:Can CodeIgniter Helper Functions use database functions? 【发布时间】:2013-04-08 20:26:34 【问题描述】:

我的 CodeIgniter 控制器函数之一需要调用递归函数作为其功能的一部分。如果我把它放在控制器类中,函数调用会阻塞,如果我把它放在类之外,它就不能访问数据库函数($this->db->get())。让它成为一个辅助函数会解决这个问题吗?

【问题讨论】:

请发布您的控制器代码。 为什么不直接使用模型呢?无论如何,这就是你的数据库交互应该去的地方。 【参考方案1】:

你可以获得实例:

 $CI =& get_instance();

之后,您将能够使用$CI->db 进行查询..

【讨论】:

太棒了,经过一番阅读,这正是我想要的。 为什么它被否决了?请让我们知道这有什么问题。 @svetoslav 但从 MVC 的角度来看这样做是正确的吗?只是想知道,我是新手 @gepex 这是 7 年前的答案。通常它不是我们今天通常看到的,我们可以说它是针对 MVC 的。然而,这是它在 CodeIgniter 直到 v4 的工作方式,可能是大约 10 年前编写的解决方案..(甚至更长时间)..【参考方案2】:

如果你想在库、助手中使用 $this 并访问所有方法:

    $this->ci =& get_instance();
    $this->ci->load->database();

你也可以这样做:

    $this->ci->config->item('languages');

    $this->ci->load->library('session');

【讨论】:

这是一个很棒的主题,解释了如何在您知道要使用 get_instance() 后使用 get_instance()。【参考方案3】:

我们可以在helper中定义一个函数

if (!function_exists('getRecordOnId'))

    function getRecordOnId($table, $where)
        $CI =& get_instance();
        $CI->db->from($table);
        $CI->db->where($where);
        $query = $CI->db->get();
        return $query->row();
    

我们可以像这样从视图中调用

$recordUser = getRecordOnId('users', ['id' => 5]); //here 5 is user Id which we can get from session or URL.

【讨论】:

【参考方案4】:
 //Select Data:

$this->db->select(‘fieldname seperated by commas’);

$this->db->from(‘table’);

$query = $this->db->get();

$results=$query->result() ;

//Joins:

$this->db->select(‘*’);
$this->db->from(‘table1′);
$this->db->join(‘table2′, ‘table2.id = table1.id’);

$query = $this->db->get();

我们可以从 http://skillrow.com/codeignitor-database-functions/

【讨论】:

以上是关于CodeIgniter Helper Functions 可以使用数据库函数吗?的主要内容,如果未能解决你的问题,请参考以下文章

codeigniter 覆盖表单助手中的 set_value 函数,使用 MY_helper 在获取时重新填充字段,同时发布

从 Codeigniter 导出 CSV 文件

在 Codeigniter 中调用扩展辅助函数时未定义的函数

Codeigniter 4 - 表单验证

如何在 Codeigniter 模型中编写此查询?

CodeIgniter 将数据传递给视图