【问题标题】:Set database schema in CodeIgniter for Oracle在 CodeIgniter for Oracle 中设置数据库模式
【发布时间】:2019-02-05 21:07:26
【问题描述】:

我正在尝试学习 CodeIgniter,只是尝试使用 MVC 架构的 model 组件。

我第一次尝试使用查询生成器,但发现它不断在我的表/列名称中添加引号。一种解决方法是在它们上使用所有大写字母并修复它。我讨厌全部大写,所以我决定不使用查询生成器,而是使用$this->db->query();

我现在遇到的问题是我必须不断地用表名编写架构:SELECT * FROM schema.table_name。我想避免为我需要引用的所有表写schema.

我浏览了文档并看到了a configuration for setting schemas,但它似乎只与 PostgreSQL 和 ODBC 驱动程序一起使用。我仍然尝试了它,但它当然没有像我预期的那样工作。我仍然收到一条错误消息,提示找不到该表。

注意事项:

我以我的用户身份登录,但我需要以其他用户身份运行查询 - 即以 user1 身份登录但需要以 user2.table_name 身份运行查询。

【问题讨论】:

  • @ 架构:CI 3.0 的文档说:The database schema, defaults to ‘public’. Used by PostgreSQL and ODBC drivers.
  • @Vickel 我已经通过$db['default']['_protect_identifiers'] = false; 解决了引号问题。您是否知道避免需要不断提供架构的方法?

标签: php oracle codeigniter schema


【解决方案1】:

所以我可以通过在我的模型类上添加 __construct() 来解决这个问题。

class My_model extends CI_Model {
  public function __construct() {
    $this->db->query("ALTER SESSION SET CURRENT_SCHEMA = my_schema");
  }

  public function get_awesome_user() {
    $this->db->select("u.username, u.firstname, u.lastname");
    $this->db->from("sys_users u");
    $this->db->where("u.username", $this->input->post("username"));

    $query = $this->db->get();
    return $query->result();
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 2018-06-07
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多