2012-11-25 16 views
6

開発中のモバイルアプリ用のWebサービスバックエンドを作成しています。私は基本的にCodeigniterとPhil SturgeonのRESTfulなAPIサーバを使用したいと思っています。https://github.com/philsturgeon/codeigniter-restserverしかし、すべてのセットアップと作業に手間がかかります。CodeIgniterを使用したREST API

私はそこにデータで設定されているMySQLデータベースを持っています。そして、そのデータベースの中にあるもののJSONデータを返す、CodeIgniterのPHPモデルとコントローラを書く助けが必要です。すべてのチュートリアルとフォーラムの投稿では、MySQLデータベースではなく、コントローラでハードコードされたデータを処理しています。私は理想的には、http://api.mysite.com/v1/search?id=1&name=foo&city=barのようにフォーマットされたURLを持っていると思いますが、URLに渡すパラメータが50以上ある可能性があります。

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); 
    } 
} 

私に1つの検索語を取得のみ:フィルのコードを使用して

、私は私のコントローラとして本が出ている?IDを=#..私は、複数の検索語

を取得する方法を知っておく必要があります

<?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;; 
} 

これはちょうどかかわらず、私はURLでそれを渡しどのIDまたはURL用語の私のMySQLデータベース内のすべてを返します。

は、ここに私のCodeIgniterのモデルです。

独自のカスタムAPIを開発する際に大きな騒ぎがありますので、コントローラとデータベースモデルを修正する方法の提案は大きな助けになります。

ありがとうございました!

-brian

+0

さて、あなたの方法は、「GET_ALL」と呼ばれているので、私は行動が正しいと仮定し...代わりにコードスニペットで –

答えて

0

ユーザーCodeigniter's Active recordは、私はあなたがあなたの必要性に従ってさらに条件を追加することができ、それには一つの条件を追加してばかりいる、次の例を参照してください、あなたはアクティブなレコードの方法を使用してクエリのいずれかのタイプを構築することができ、適切なクエリを構築します。

<?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

「をGET_ID()」メソッドを示し、彼は実際にはすでに –

+0

を、それを使用していますが、彼は質問する他の方法を知らない –

+0

これは素晴らしいことであり、私の問題の一部を達成するのに役立ちましたが、URLからより多くのパラメータを渡すにはどうすればよいですか?つまり、:search?type = Restaurant&location = San%20Francicso – Brian

0

照会ご確認ください

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

この古い質問ですが、誰かがここに行くと、まだ助けが必要な場合は、これらのコードを試してみてください。

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); 
    } 
} 
:あなたのコントローラで

お使いのモデルでは、get_searchedを作成してください機能:

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; 
    } 
} 
関連する問題