Codeigniter API Get Call With Param Options For WHERE Mysql



我正在使用CodeIgniter来构建我的api,我正在尝试找到允许发送多个参数的最佳方法,然后运行我的模型where子句(如果存在(。我遇到了一些问题,如果有人可以传递一些建议,我将不胜感激,因为我的整个设置都变得臃肿了。

我的查询可以采用以下参数:

/v1/tags?status=1&parentId=1&order=desc&limit=10&offset=1

这是我的桌子。

id  int(11) NO  PRI     auto_increment            
parentId    int(11) NO              
name    varchar(250)    NO              
status  tinyint(4)  NO              
createdDate timestamp   NO      CURRENT_TIMESTAMP 

这是我的控制器。

/**
* READ TAGS
*/
public function tags_get() {

// OPTIONALS:
$parentId   = $this->get('parentId');
$status     = $this->get('status');
// DEFAULTS:
$offset     = $this->get('offset');
$order      = $this->get('order');
$limit      = $this->get('limit');
// WHERE QUERY:
$where = [];
// VALIDATE:
if(isset($status)){
if ($status != 'publish' && $status != 'future' && $status != 'draft' && $status != 'pending' && $status != 'private' && $status != 'trash') {
$this->response(array(
'status'  => FALSE,
'message' => '(status) must be one of the following (publish|future|draft|pending|private|trash)'
), REST_Controller::HTTP_OK);
}
// ADD TO QUERY:
$where['status'] = $status;
}
if(isset($parentId)){
if (filter_var($parentId, FILTER_VALIDATE_INT) === false) {
$this->response(array(
'status'  => FALSE,
'message' => '(parentId) must be int'
), REST_Controller::HTTP_BAD_REQUEST);
}
// ADD TO QUERY:
$where['parentId'] = $parentId;
}
// IF NO PARAMS RETUNR ALL DATA
$data = $this->user_model->get_tags($where, $order, $offset, $limit);
if($data){
$this->response([
'status'  => TRUE,
'message' => 'Success',
'paging'  => $offset,
'records' => count($data),
'data'    => $data,
], REST_Controller::HTTP_OK);
}else{
$this->response([
'status' => FALSE,
'message' => 'Not found',
'data' => []
], REST_Controller::HTTP_NOT_FOUND); 
}
}  

这是我的模型

function get_tags($where = [], $order = 'desc', $offset = 0, $limit = 100){
// MAIN QUERY:
$this->db->select('*');    
$this->db->from('tags');
// OPTIONAL WHERE QUERIES:
foreach ($where as $key => $value) {
$this->db->where($key, $value);
}
// DEFUALTS:
$this->db->order_by('createdDate', $order); 
$this->db->limit($limit, $offset);
$query = $this->db->get();
return ($query->num_rows() > 0) ? $query->result_array() : FALSE;
}

执行以下查询。

/v1/tags?status=0

如果我使用"是 |否或打开 |关闭作为我数据库中的 varchar 而不是布尔值?

更新: 根据 Rays 的回答,我将更改状态以接受以下值。

publish
future
draft
pending
private
trash

我还更新了我的控制器,见上文。

老实说,你的方法非常好,最好选择ON OFF,因为如果你想适应新的状态,数字可能会变得复杂,

让我们以这个例子为例,

出于某种原因,您的经理在您的系统中又添加了 3 个统计数据,例如 0,1,2,3,4

这意味着

  • 0 表示关闭
  • 1 已打开
  • 2 挂起
  • 3 损坏
  • 4 被取消

将来您将无法根据他们的号码记住状态,但是如果您改用名称,则可以更好地理解。

最后,为了稳定性,坚持使用已知的结构。

相关内容

  • 没有找到相关文章

最新更新