Php 通过过滤器从多个数据库中选择
我的网站url如下所示: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
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?。