Codeigniter API Get Call с параметрами Param для ГДЕ переполнения стека запросов Mysql

Я использую CodeIgniter для создания своего API, и я пытаюсь найти лучший способ разрешить отправку нескольких параметров, чтобы затем запустить предложение Model 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

Это не удается, если я использую ДА | НЕТ или ВКЛ | OFF как varchars в моей базе данных вместо логических значений?

ОБНОВИТЬ:
На основании ответа Rays я буду менять статус, чтобы принять следующие значения.

publish
future
draft
pending
private
trash

Я также обновил свой контроллер, см. Выше.

-1

Решение

Если честно, ваш подход достаточно хорош, лучше выбрать ON OFF, так как числа могут усложниться, если вы хотите адаптировать новые состояния,

Давайте возьмем этот пример,

По какой-то причине ваш менеджер добавил еще 3 статистики в вашу систему, скажем, 0,1,2,3,4

что значит

  • 0 выключен
  • 1 включен
  • 2 ожидают
  • 3 поврежден
  • 4 отменяется

вы не сможете вспомнить статус в зависимости от их количества в будущем, но если вы будете использовать вместо них имена, вы сможете лучше понять.

В конце концов, ради стабильности придерживайтесь известной структуры.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector