FuelPHPでDBの結果を1次元で取得したい

こんにちわ、araishiです。最近は研修生がブログをガンガン更新していますが。若さのせいか、すごい勢いなので、こちらも負けずに書いていきます。

FuelPHPというPHPのフレームワークを触ってみました。
まずはDB周りをやっています。最近のフレームワークはORM(Object-Relational Mapping)が完備されていて、MySQLのクエリを書けなくても、それとなーく実行できる便利な世の中になりました。でもMySQLのクエリが書けないと、DBの本質的なところが理解できないし、クエリの最適化もできないので、個人的にはORMを使うよりもクエリのベタ書きが好きです。

さて、FuelPHPのDBクラスの使い方は下記のするようです。

普通のセレクト

$sql = 'SELECT * FROM user ';
$users = DB::query($sql)->execute()->as_array();
// print_r($users)
Array
(
    [0] => Array
        (
            [id] => 1000
            [name] => 田中
        )
    [1] => Array
        (
            [id] => 1001
            [name] => 山田
        )
    [2] => Array
        (
            [id] => 1002
            [name] => 佐藤
        )
)

1次元目のキーを指定してセレクト

as_array()のパラメータ1にフィールド名を書くと1時限目のキーを指定できます。(※重複した値は勝手に上書きので注意)

$sql = 'SELECT * FROM user ';
$users = DB::query($sql)->execute()->as_array('id');
// print_r($users)
Array
(
    [1000] => Array
        (
            [id] => 1000
            [name] => 田中
        )
    [1001] => Array
        (
            [id] => 1001
            [name] => 山田
        )
    [1002] => Array
        (
            [id] => 1002
            [name] => 佐藤
        )
)

1レコードだけの時は1次元で取得したい

1レコードだけ取得する場合には、1次元の連想配列で返ってくれると嬉しいですね。
調べてもなかなか見当たらなかったので、ソースコードを見てみるとcurrent()メソッドを使うといけそうでした。

$sql = 'SELECT * FROM user WHERE id = 1000';
$user = DB::query($sql)->execute()->current();
// print_r($user)
Array
(
    [id] => 1000
    [name] => 田中
)

新しいフレームワークを使うと、今まで簡単に書けてた事ができなくなって、もどかしくなります。1ヶ月間も使い続ければ何とかなりそうですが、もどかしいのを1ヶ月間続けるのは、かなりの苦痛で、「もし1か月後にできなかったらどうしよう・・・」という不安がよぎります。
でもこれは新しい言語でも同じ事で、「もう使える言語があるから新しい言語なんて別にいいじゃん。わざわざ遠回りする必要ないでしょ。」と思ってサボってると、業界が進歩した時ついていけなくなり、最終的には老害になってしまうので注意したいところです。
なので同じような案件が発生した時でも、まったく同じで済ませるんじゃなく、少しずつ新しい事を取り入れていきたいんですよね。

カテゴリー: mysql, php

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*