我当前的模型有点像
class select extends CI_Model{
function __construct(){
parent::__construct();}
public function get_a(){
$this->db->select('*');
$this->db->from('table1');
$this->db->join('table2','table1.id =
table2.id');
$this->db->where('x',1);
}
public function get_b(){
$this->db->select('*');
$this->db->from('table1');
$this->db->join('table2','table1.id =
table2.id');
$this->db->where('x',2);
}
public function get_c(){
$this->db->select('*');
$this->db->from('table1');
$this->db->join('table2','table1.id =
table2.id');
$this->db->where('x',3);
}
正如您所看到的,在所有三个函数中重复相同的Join操作。有没有办法我可以加入一次并将其与 where子句一起使用
还有其他问题。如果有可能它比现有方法有效吗?
答案 0 :(得分:0)
重复代码是浪费和可避免的。这是一个函数,它将一个参数与where
一起使用。
public function get_x($where){
$this->db
->select('*')
->from('table1')
->join('table2','table1.id = table2.id')
->where('x',$where);
}
答案 1 :(得分:0)
如果我理解你是对的 - 你可以做以下
class select extends CI_Model
{
public function __construct()
{
parent::__construct();
}
public function get_a()
{
$this->initializeBaseQuery();
$this->db->where('x',1);
}
public function get_b()
{
$this->initializeBaseQuery();
$this->db->where('x',2);
}
public function get_c()
{
$this->initializeBaseQuery();
$this->db->where('x',3);
}
private function initializeBaseQuery()
{
$this->db->select('*');
$this->db->from('table1');
$this->db->join('table2','table1.id = table2.id');
}
}
答案 2 :(得分:0)
您可以针对您的问题尝试此解决方案:
选择模态文件:
<?php
class Select extends CI_Model{
function __construct(){
parent::__construct();
}
public function get_selection($where = array()){
$this->db->select('*');
$this->db->from('table1');
$this->db->join('table2','table1.id = table2.id', 'left');
if(!empty($where)) {
foreach ($where as $key => $value) {
$this->db->where($key,$value);
}
}
$query_result = $this->db->get();
$result = $query_result->result();
return $result;
}
}
?>
文本控制器文件:
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Test extends CI_Controller {
public function __construct() {
parent::__construct();
}
public function get_select(){
$where = array("x"=>"1"); // you can pass more than one key and value for condition.
$result =$this->select->get_selection($where);
echo "<pre>";
print_r($result);
exit;
}
}
}
?>
我希望它会对你有所帮助。