2016-05-19 17 views
0

こんにちは、私はCodeigniterを使用してREST APIを構築しています。物事は、私は特定のプロパティの価格を取得したいです。私は価格を正しく取得するが、私は今年だけの価格を取得したい。テーブルには2003年から2017年までの価格がありますので、今年以上の価格を表示したいだけです。特定の値をPHPの配列から削除する

{ 
    "status": "success", 
    "status_code": "200", 
    "message": "200 OK", 
    "response": [ 
    { 
     "property_id": "3", 
     "price_id": "66", 
     "price": "350", 
     "currency": "EUR", 
     "timeframe_id": "1" 
    }, 
    { 
     "property_id": "3", 
     "price_id": "70", 
     "price": "300", 
     "currency": "EUR", 
     "timeframe_id": "6" 
    } 

と一番下にある:

は、だから私はこのような何かを持っている私は、彼らがピリオドを持って価格を表示している何をしたいのか

{ 
     "property_id": "3", 
     "price_id": "167547", 
     "price": "500", 
     "currency": "EUR", 
     "timeframe_id": "1186", 
     "periods": [ 
     { 
      "from": "2015-12-12", 
      "to": "2015-12-19", 
      "day": "Sa" 
     } 
     ] 
    }, 
    { 
     "property_id": "3", 
     "price_id": "167548", 
     "price": "550", 
     "currency": "EUR", 
     "timeframe_id": "1187", 
     "periods": [ 
     { 
      "from": "2015-12-19", 
      "to": "2015-12-26", 
      "day": "Sa" 
     } 
     ] 
    } 
    ] 
} 

。だから私はunsetを使用したが結果はこのような奇妙な方法で来る:

{ 
    "status": "success", 
    "status_code": "200", 
    "message": "200 OK", 
    "response": { 
    "582": { 
     "property_id": "3", 
     "price_id": "167498", 
     "price": "300", 
     "currency": "EUR", 
     "timeframe_id": "1137", 
     "periods": [ 
     { 
      "from": "2015-01-03", 
      "to": "2015-01-10", 
      "day": "Sa" 
     } 
     ] 
    }, 
    "583": { 
     "property_id": "3", 
     "price_id": "167499", 
     "price": "300", 
     "currency": "EUR", 
     "timeframe_id": "1138", 
     "periods": [ 
     { 
      "from": "2015-01-10", 
      "to": "2015-01-17", 
      "day": "Sa" 
     } 
     ] 
    } 

どのように私は、この582を削除することができます:{すべてのオブジェクトの前に?私のコードは次のとおりです。

$prices = $this->Model_prices->get_many_by(array('Objekt' => $property_id)); 
      foreach ($prices as $key => $value) { 
       $data = $this->timeframe_get($value['timeframe_id']); 
       foreach ($data as $k => $v) { 
        $from = $v['from']; 
        if (date("Y", strtotime(".$from.")) >= "2015") { 
         $prices[$key]['periods'] = $data; 
        }else{ 
         unset($prices[$key]); 

        } 

       } 


      } 
      $this->response(array('status' => 'success', 'status_code' => '200', 'message' => '200 OK', 'response' => $prices)); 

timeframe_get方法:

public function timeframe_get($timeframe_id){ 
    $this->load->model('Model_timeframe'); 
    $this->load->database(); 
    // $sql = "SELECT ID as id, von as _from, bis as _to FROM zeitraeumevk WHERE ID = $timeframe_id AND YEAR(von) >= YEAR('2015-01-01')"; 
    // $query = $this->db->query($sql); 
    $timeframes = $this->Model_timeframe->get_many_by(array('ID' => $timeframe_id)); 
    if ($timeframes) { 
     return $timeframes; 
    } else { 
     return "There is no timeframe specified for this property"; 
    } 

} 

任意のアイデア?前もって感謝します!!!

+1

DBクエリーを変更して、条件ではなく年に従って結果を取り込もうとしました。 –

+0

例を挙げて説明していただけますか? – BRG

+0

get_many_by関数を投稿できますか? –

答えて

0

私は最終的に、このようにそれを解決するために管理している:

$sql = "SELECT z.ID as id, z.von as _from, z.bis as _to, p.ID as price_id, p.Objekt as property_id, p.Preis as price FROM timeframe` z INNER JOIN prices p ON z.ID = p.Zeitraum INNER JOIN properties o ON p.Objekt = o.ID WHERE p.Objekt = ".$property_id." AND YEAR(z.von) >= YEAR('2015-01-01');"; 

しかし、MY_Modelが使用する組み込みのメソッドを実際に使用することができればいいでしょう。

2

あなたが望む形式でデータをクエリを作成し、取得するには、「クエリビルダクラス」を使用することができますが、何かのように:

$this->db->where(array('Objekt' => $property_id, 'from >='=>'2015-01-01'))->get('prices'); 
+0

それは私に何も与えません。私はtimeframe_getメソッドを持っている私の更新された質問を確認してください。 – BRG

+0

おっと、私の悪い今それを使用しようとします.... –

+0

それはすべての行を返しません。そして、テーブル2015の内部には行があります – BRG

関連する問題