Php 通过过滤器从多个数据库中选择

Php 通过过滤器从多个数据库中选择,php,mysql,codeigniter,activerecord,Php,Mysql,Codeigniter,Activerecord,我的网站url如下所示: http://example.com/realestate/type-apartament/rooms-3-2/key-value1-value2-value3 [type] => Array ( [0] => apartament ) [rooms] => Array ( [0] => 3 [1] => 2 ) [key] => Array

我的网站url如下所示:

http://example.com/realestate/type-apartament/rooms-3-2/key-value1-value2-value3
[type] => Array
    (
        [0] => apartament
    )

[rooms] => Array
    (
        [0] => 3
        [1] => 2
    )

[key] => Array
    (
        [0] => value1
        [1] => value2
        [2] => value3
    )
Select * from properties a
LEFT JOIN properties_type b
ON a.property_type_id = b.property_type_id
WHERE b.property_type = apartament
AND a.rooms = 3 AND a.rooms = 2
$this->load->model('Filter_model');
$result = $this->Filter_model->model_filter($filter); 

function model_filter($filter)
{
    $this->db->select('*');
    $this->db->from('properties');
    $this->db->join('properties_type', 'properties.property_type_id = properties_type.property_type_id', 'left');
    foreach ($filter as $key => $index) 
    {
        foreach ($index as $number => $value)
            $this->db->where($key => $value);
    }
    $data = $this->db->get()->result_array();

    return $data;
}
从这里我得到一个如下的数组:

http://example.com/realestate/type-apartament/rooms-3-2/key-value1-value2-value3
[type] => Array
    (
        [0] => apartament
    )

[rooms] => Array
    (
        [0] => 3
        [1] => 2
    )

[key] => Array
    (
        [0] => value1
        [1] => value2
        [2] => value3
    )
Select * from properties a
LEFT JOIN properties_type b
ON a.property_type_id = b.property_type_id
WHERE b.property_type = apartament
AND a.rooms = 3 AND a.rooms = 2
$this->load->model('Filter_model');
$result = $this->Filter_model->model_filter($filter); 

function model_filter($filter)
{
    $this->db->select('*');
    $this->db->from('properties');
    $this->db->join('properties_type', 'properties.property_type_id = properties_type.property_type_id', 'left');
    foreach ($filter as $key => $index) 
    {
        foreach ($index as $number => $value)
            $this->db->where($key => $value);
    }
    $data = $this->db->get()->result_array();

    return $data;
}
我的select from db应如下所示:

http://example.com/realestate/type-apartament/rooms-3-2/key-value1-value2-value3
[type] => Array
    (
        [0] => apartament
    )

[rooms] => Array
    (
        [0] => 3
        [1] => 2
    )

[key] => Array
    (
        [0] => value1
        [1] => value2
        [2] => value3
    )
Select * from properties a
LEFT JOIN properties_type b
ON a.property_type_id = b.property_type_id
WHERE b.property_type = apartament
AND a.rooms = 3 AND a.rooms = 2
$this->load->model('Filter_model');
$result = $this->Filter_model->model_filter($filter); 

function model_filter($filter)
{
    $this->db->select('*');
    $this->db->from('properties');
    $this->db->join('properties_type', 'properties.property_type_id = properties_type.property_type_id', 'left');
    foreach ($filter as $key => $index) 
    {
        foreach ($index as $number => $value)
            $this->db->where($key => $value);
    }
    $data = $this->db->get()->result_array();

    return $data;
}
如何根据我拥有的键值生成此select?我唯一想到的解决方案是创建一个数组帮助器,其中包含每个键和相应的表、外键、列

这是我处理url中的过滤器的函数:

if(!function_exists('process_filters')) {

    function process_filters($filters) {
        $data = array();
        foreach($filters as $filter):
            $filter_exploded = explode('-', $filter);
            $val = array_shift($filter_exploded);
            $data[$val] = $filter_exploded;
        endforeach;
        return $data;
    }

}
其中,$过滤器来自控制器方法:

public function index(...$params)

我将在
$filter
变量中设置您的筛选器。 然后你需要调用你的过滤器模型。例如,我将确定您的型号名称为
Filter\u model
然后您需要从控制器调用model_filter,如下所示:

http://example.com/realestate/type-apartament/rooms-3-2/key-value1-value2-value3
[type] => Array
    (
        [0] => apartament
    )

[rooms] => Array
    (
        [0] => 3
        [1] => 2
    )

[key] => Array
    (
        [0] => value1
        [1] => value2
        [2] => value3
    )
Select * from properties a
LEFT JOIN properties_type b
ON a.property_type_id = b.property_type_id
WHERE b.property_type = apartament
AND a.rooms = 3 AND a.rooms = 2
$this->load->model('Filter_model');
$result = $this->Filter_model->model_filter($filter); 

function model_filter($filter)
{
    $this->db->select('*');
    $this->db->from('properties');
    $this->db->join('properties_type', 'properties.property_type_id = properties_type.property_type_id', 'left');
    foreach ($filter as $key => $index) 
    {
        foreach ($index as $number => $value)
            $this->db->where($key => $value);
    }
    $data = $this->db->get()->result_array();

    return $data;
}

我不知道你已经走了多远,你有带值的数组吗?还是怎样你能告诉我们你已经做了多少/你尝试了什么吗?我编辑了我的代码,请勾选OK,但是如果我有20个过滤器,我应该加入所有10个表吗?我想只有在应用过滤器的情况下才能加入。和
$this->db->where($key=>$value)
$key
并非始终与列名相同。是否所有表都始终具有属性\u type\u id?。