繁体   English   中英

SQL SELECT *,但有一个转折-CodeIgniter

[英]SQL SELECT * but with a twist - CodeIgniter

OK,可以说我想从数据库表中选择许多列,但是我不知道这些列在方法中是什么。 我可以传递它们,但是它可能或多或少取决于调用数据库方法的方法。

快速修复方法是SELECT *,但我知道这很不好,并且可能导致返回比需要的更多的数据,而且我绝对不需要该表中的所有数据。

因此,我正在使用CodeIgniter和准备好的语句来执行此操作,以下是我目前拥有的内容(它有效,请指出)。

function get_pages() {
        $this->db->select('pages.id, pages.title, pages.on_nav, pages.date_added, admin.first_name, admin.last_name')
                 ->from('pages, admin') 
                 ->where('pages.admin_id = admin.id')
                 ->order_by('pages.id', 'ASC');

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

        return $query->result();
    }

这是一个简单的功能,但目前仅限于仅获取“页面”。 我想将其转换为也可以从其他表获取。 什么是最好的方法?

提前谢谢了。

编辑笨我有很多的控制器。 一个用于“页面”,一个用于“产品”,一个用于“新闻”等等。 我不想在我的模型中为每个控制器创建一个数据库查询方法。

我认为没有4种方法的愿望被误导了。 如果您在方法中没有信息,则必须将其传递。因此,您可以传递带有所需表的字符串,然后根据表名切换更改查询的条件,或者传递查询的所有必要部分。 这将包括表名称,条件列,条件和要选择的列。 并且您每次调用该函数时都需要传递该信息。 这两种方法都不能真正为您节省很多代码,而且每种方法的可读性都比函数差。

带有将特定查询放入其中的持久层的模型的整个想法。 使用通用的万能方法可能会造成灾难性且难以测试。 您应该围绕要解决的问题塑造模型。

这使得它更清洁,更容易使用。 同时,您还必须避免模型过大的常见陷阱。 每个模型都应遵循SRP。 尝试分离问题,以便在控制器中轻松查看状态更改。

这有意义还是我只是在闲逛...?

在您的模型中:

function get_pages($table_source) {
    $this->db->select($table_source.".id"); // or $this->db->select('id');

// for instance, if one of your $table_source ="users" and there is no 'title' column you can write
    if($table_source!='users') $this->db->select('title');

    $this->db->select('on_nav');
    $this->db->select('date_added');
    $this->db->select('admin.first_name');
    $this->db->select('admin.last_name'); 
    $this->db->join('admin','admin.id = '.$table_source.'.admin_id') 
    $this->db->order_by('pages.id', 'ASC');

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

    return $query->result_array();
}

在您的控制器中:

function all_tables_info() {
    $tables = array("pages","users","customers"); 
    $i=0;
    foreach($tables as $table) {
    $data[$i++]=$this->your_Model->get_pages($table);
 }
  //do somthing with $data
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM