【问题标题】:Joining two databases using active record in codeigniter使用 codeigniter 中的活动记录连接两个数据库
【发布时间】:2013-02-14 18:18:17
【问题描述】:

有没有人知道如何使用 codeignitor 活动记录连接来自两个不同数据库的两个表?

我有这两个数据库实例:

      $this->DB2 = $this->load->database('asterisk', TRUE);
      $this->DB1 = $this->load->database('default', TRUE); 

我想从这两个不同的数据库中连接两个表。我怎样才能做到这一点?

如果您有任何文档链接,请给我。

【问题讨论】:

    标签: database codeigniter activerecord join


    【解决方案1】:

    您是否尝试过为每个数据库添加前缀?我无权访问我的本地服务器来测试这个,但如果你对这两个数据库都有权限,类似这样的东西应该可以工作:

    $this->db->select('*');
    $this->db->from('asterisk.blogs');
    $this->db->join('default.comments', 'default.comments.id = asterisk.blogs.id');
    

    【讨论】:

    • 如果两个数据库在不同的服务器上怎么办?那我怎样才能得到记录。
    【解决方案2】:

    如果您无法加入两个不同的数据库,并且不想使用常规 SQL 语句 - 您可以尝试使用 ActiveRecord 缓存来执行此操作。

    http://ellislab.com/codeigniter/user-guide/database/active_record.html#caching

    一些可能不起作用的“伪代码” - 但可能会帮助您入门。

    $this->db = $this->load->database('asterisk', TRUE);
    $this->db->start_cache();
    $this->db->select('*');
    $this->db->stop_cache();
    $this->db->get('table1');
    
    $this->db = $this->load->database('default', TRUE);
    $this->db->select('*');
    $this->db->from('table2');
    $this->db->join('table1', 'table1.id = table2.id');
    $this->db->get();
    

    【讨论】:

    • 您是否有可能不必指定 ON 部分?因为我可以在没有活动记录的情况下指定它,但我不知道如何并排活动记录。当我在$this->db->join() 函数中省略第二个参数时,SQL 左侧总是有一个“ON”。你能帮忙吗?
    【解决方案3】:

    在您的模型中调用另一个数据库:

    function __construct() {
        parent::__construct();
        $this->DB2= $this->load->database('DB2', TRUE);
    }
    

    然后在 Join 上使用数据库的名称

    function get_personas() {
            $this->db->join('DB2.administrador c', 'c.id_administrador = personas.id_administrador', 'left');
            $this->db->select('c.administrador_nombre AS admin', FALSE);
            $this->db->join('tipo_identificacion b', 'b.id_tipo_identificacion = personas.id_tipo_identificacion', 'left');
            $this->db->select('b.tipo_identificacion_nombre', FALSE);
            $this->db->select('personas.*', FALSE);
            $this->db->where('id_personas <>', 1);
            $query = $this->db->get('personas');
            if ($query->num_rows() > 0) {
                return $query->result();
            } else {
                return FALSE;
            }
        }
    

    【讨论】:

    • 如果两个数据库在不同的服务器上怎么办。那我怎样才能得到记录。
    猜你喜欢
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 2012-12-06
    • 1970-01-01
    相关资源
    最近更新 更多