2012-11-25 108 views
6

Tôi đang tạo phụ trợ dịch vụ web cho ứng dụng dành cho thiết bị di động mà tôi đang phát triển. (Tôi là một nhà phát triển kinh nghiệm Obj-C, không phải là một nhà thiết kế web!) Về cơ bản tôi muốn sử dụng Codeigniter và Restful API RESTful API Server https://github.com/philsturgeon/codeigniter-restserver tuy nhiên, tôi đang gặp một số vấn đề khi thiết lập và làm việc.API REST với CodeIgniter

Tôi có cơ sở dữ liệu MySQL được thiết lập với dữ liệu trong đó. Và tôi cần một số trợ giúp viết một mô hình PHP CodeIgniter và bộ điều khiển trả về dữ liệu JSON về những gì nằm bên trong cơ sở dữ liệu đó. Tất cả các hướng dẫn và bài viết của diễn đàn tôi đã tìm thấy đối phó với dữ liệu hardcoded trong controler, không phải là một cơ sở dữ liệu MySQL. Tôi lý tưởng muốn có URL được định dạng như thế này http://api.mysite.com/v1/search?id=1&name=foo&city=bar, tôi có khả năng có hơn 50 tham số để chuyển vào url.

Sử dụng mã Phil, tôi đã đưa ra với điều này như điều khiển của tôi:

public function index_get() 
{ 
    if (!$this->get('id')) 
    { 
     $this->response(NULL, 400); 
    } 

    $data = $this->grid_m->get_id($this->get('id')); 
    if ($data) 
    { 
     $this->response($data, 200); 
    } 
    else 
    { 
     $this->response(NULL, 404); 
    } 
} 

Đó chỉ được tôi một thuật ngữ tìm kiếm:? Id = # .. Tôi cần phải biết làm thế nào để có được nhiều điều kiện tìm kiếm

Đây là mô hình CodeIgniter tôi:

<?php 

class Grid_m extends CI_Model 
{ 

function get_all() 
{ 
    $query = $this->db->get('grid'); 
    if ($query->num_rows() > 0) 
    { 
     return $query->result(); 
    } 
    return FALSE;; 
} 

này chỉ trả về tất cả mọi thứ trong cơ sở dữ liệu MySQL của tôi bất kể những gì id hoặc url hạn tôi vượt qua nó trong URL.

Tôi là một noob lớn khi phát triển API tùy chỉnh của riêng mình nên mọi đề xuất về cách khắc phục bộ điều khiển và mô hình cơ sở dữ liệu của tôi sẽ là một trợ giúp lớn!

Cảm ơn sự giúp đỡ!

-brian

+0

Vâng, phương pháp của bạn được gọi là "get_all", vì vậy tôi cho rằng hành vi này là đúng ... hiển thị "get_id()" phương pháp thay –

Trả lời

0

tài Codeigniter's Active record để xây dựng truy vấn thích hợp, bạn có thể xây dựng bất kỳ loại truy vấn sử dụng phương pháp kỷ lục hoạt động, tham khảo ví dụ sau Tôi vừa thêm vào một điều kiện trong đó bạn có thể thêm điều kiện hơn theo nhu cầu của bạn .

<?php 
class Grid_m extends CI_Model 
{  
    function get_all() 
    { 
    $this->db->select('col1, col2, col3')->where('id', 5); 
    $query = $this->db->get('grid'); 

    if ($query->num_rows() > 0) 
    { 
     return $query->result(); 
    } 
    return FALSE;; 
    } 

} 
+2

Trong đoạn mã, anh ấy thực sự sử dụng nó đã –

+0

nhưng anh ấy không biết các cách khác để truy vấn –

+0

Điều này thật tuyệt vời và đã giúp tôi hoàn thành một phần vấn đề của mình, nhưng làm cách nào tôi có thể chuyển nhiều thông số hơn từ URL của mình? ví dụ: tìm kiếm? type = Nhà hàng & vị trí = San% 20Francicso – Brian

0

Vui lòng kiểm tra bạn truy vấn

$query = $this->db->get_where('grid', array('id' => $id)); 
1

Đây là câu hỏi cũ nhưng nếu ai đó đi đây và vẫn cần sự giúp đỡ, hãy thử các mã:

Trong điều khiển của bạn:

public function index_get() 
{ 
    $where = ''; 

    if ($this->get('id')) // search by id when id passed by 
    {    
     $where .= 'id = '.$this->get('id'); 
    } 

    if ($this->get('name')) // add search by name when name passed by   
    { 
     $where .= (empty($where)? '' : ' or ')."name like '%".$this->get('name')."%'"; 
    } 

    if ($this->get('city')) // add search by city when city passed by 
    { 
     $where .= (empty($where)? '' : ' or ')."city like '%".$this->get('city')."%'"; 
    } 

    // you can add as many as search terms 

    if (! empty($where)) 
    { 
     $data = $this->grid_m->get_searched($where); 

     if ($data) 
     { 
      $this->response($data, 200); 
     } 
     else 
     { 
      $this->response(NULL, 404); 
     } 
    } 
    else 
    { 
     $this->response(NULL, 404); 
    } 
} 

Trong mô hình của bạn, hãy tạo get_searched Chức năng:

class Grid_m extends CI_Model 
{ 
    function get_searched($where = NULL) 
    { 
     if (! is_null($where)) 
     { 
      $this->db->where($where); 
      $query = $this->db->get('grid'); 

      if ($query->num_rows() > 0) 
      { 
       return $query->result(); 
      } 
     } 
     return FALSE; 
    } 
}