[英]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.