My days of...

生活のことなど、がんばろう

CodeIgniterのチュートリアルで詰まったのは、配列で複数取得することがわかっていなかったから?

今更ながらCodeIgniter3チュートリアルをやっています。

News section — CodeIgniter 3.1.3 documentation
日本語はこっち

CodeIgniterはPHPフレームワークで現在4が開発中っぽい。簡単軽量という触れ込みがあり、割と楽で緩めの感じがいいといえば良いという印象。

チュートリアル内のニュースセクションでコントローラーで、

public function view($slug = NULL)
{
  $data['news_item'] = $this->news_model->get_news($slug);

  if (empty($data['news_item']))
  {
   show_404();
  }
  $data['title'] = $data['news_item']['title'];

  $this->load->view('templates/header', $data);
  $this->load->view('news/view', $data);
  $this->load->view('templates/footer');
}

 と記事を1つ取り出すのですが、これだとエラーに。「?」と思いながら、モデルに描いたget_news()がおかしいのかと考えて、

public function get_news($slug = FALSE)
{
  if ($slug === FALSE)
  {
   $query = $this->db->get('news');
   return $query->result_array();
  }

  $query = $this->db->get_where('news', array('slug' => $slug));
  return $query->row_array();
}

を確認。$query->row_array()で返ってきている値をprint_rで確認したら、

Array ( [0] => Array ( [id] => 2 [title] => test2 [slug] => test2 [text] => 2つ目のテスト記事。))

な感じで最初に「0」が含まれてた。配列で返るのだから当然といえば当然だったのですが、チュートリアルで間違いなの?それとも動作が変わったけどチュートリアルは古いまま?

いずれにせよ、配列で帰ってくるので、単一の記事を取得する場合には、一番始めの値であれば「0」が必要であるし、そうでなくslugとなっているので、複数取得することを前提としているのであれば、foreachなどを利用する必要があるなと思った次第でした。

 

CodeIgniter徹底入門

CodeIgniter徹底入門

 
はじめてのフレームワークとしてのFuelPHP 改訂版

はじめてのフレームワークとしてのFuelPHP 改訂版