前回はDBクラスの基本的なことについて。
今回はその返り値について。
1.DBクラスでの返り値
日本語ドキュメントより、
SELECTクエリの実行は、要求されたデータベースのレコードの値を含む結果オブジェクトを生成します。 デフォルトでは、結果は連想配列で取得します。
つまり、オブジェクトで返すの?連想配列で返すの?
デフォルトではオブジェクトが返ってくるみたい。
オブジェクト内の取得したデータの構造が、デフォルトでは連想配列ですって意味なのかな。
連想配列ってのはこんな感じの事。
こっちも日本語ドキュメントページから。
Array ( [0] => Array ( [name] => Dirk ) [1] => Array ( [name] => John ) )
デフォルトでは、この連想配列+実行した SQL文なんかも入ってくる。
だからデータを取得する場合は、結果オブジェクトをループして値を取り出さないといけない。
$result = DB::select('name')->from('users')->execute(); foreach($result as $item) { $tmp[] = $item->name; }
ちなみに、取得したオブジェクトをそのままViewに渡すとエラーになるから注意。
渡す場合は配列にしないといけないので $tmpを渡す(この場合)。
2.as_array()で返り値を配列に
たぶん、DBから配列で返してもらったほうが早いよね。
自分もこっちを使ってる。
SQL分の最後に「as_array()」をつけると配列で返してくれる。
$result = DB::select('name')->from('users')->execute()->as_array(); foreach($result as $item) { $tmp[] = $item['name']; }
as_array()から返る連想配列のキーを指定することもできる。
$result = DB::select('name')->from('users')->execute()->as_array('id'); foreach($result as $item) { $tmp[] = $item['name']; }
この場合、idが重複してると問答無用で上書きしてくるので注意する。
コメント
Hi, yup this post is truly fastidious and I have learned lot of things from it deaffagfebdk