我可以单独存储重复的SQL查询并在模型中的函数内调用它们 - Codeigniter

时间:2017-11-03 02:27:00

标签: mysql sql codeigniter

我当前的模型有点像

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子句一起使用

还有其他问题。如果有可能它比现有方法有效吗?

3 个答案:

答案 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;
        }
    }
}
?>

我希望它会对你有所帮助。