忍者ブログ

STEP UP BLOG

Home > ブログ > Laravel

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Laravel4で日時をフォーマットする

DBから取ってきたデータの日時をお好みの形式で出力する。よくある処理です。
// Controller
$row = User::find(1);

// View
{{{$row->birthday->format('Y年m月d日')}}}


Laravelでは上記のように指定フォーマットで出力できます。
ただ、そのためにはformat()が使えるカラムを設定しないといけません。
vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php
を見てみましょう。
getDates()を探します。
/**
 * Get the attributes that should be converted to dates.
 *
 * @return array
 */
public function getDates()
{
    $defaults = array(static::CREATED_AT, static::UPDATED_AT);

    return array_merge($this->dates, $defaults);
}


ここでカラム名の配列が返されます。
その配列を元に、該当するカラムのデータをCarbonのインスタンスに変換するように実装されています。
変換はasDateTime()で行なっていますね(興味ある人は調べてみてください)。
Carbonとは日時操作ライブラリです。
https://github.com/briannesbitt/Carbon
で、getDates()ですが、デフォルトでcreated_at, updated_atはCarbonのインスタンス化されます。 そこに$this->datesでこちらが指定したカラムを追加できるのですね。
というわけで、Eloquentを継承したモデルで、
class User extends Eloquent {

    protected $dates = ['birthday'];

...
}


とすると、
{{{$row->birthday->format('Y年m月d日')}}}


が使えるようになります。
直感に反しない書き方なので、これはかなり便利ではと思っています。
PR

Laravel4で発行されているSQLを取得する

Laravelで今発行しようとしているSQLを知りたい場合があります。
explainしてパフォーマンスチューニングしたいときなど知りたいですよね。
そんなときのために用意されているのがtoSql()です。
以下、使用方法。
・クエリービルダの場合
$sql = DB::table('user')->where('name', '=', '一郎')->toSql();

ただ注意点として、取得できるSQLはプレースホルダが置き換えられる前となります。
select * from `user` where `name` = ?

こんな感じです。
・Eloquent ORMの場合
こちらもクエリービルダと同様です。ちなみにEloquentは「エロクアント」と読むそうです。
$sql = User::where('name', '=', '一郎')->toSql();

これで同じように取得できます。
toSql()とexplainを駆使してどんどん高速化していきましょう。速いことはいいこと!

Laravel4でルーティング一覧を表示する

Laravel4ではルーティングの設定はapp/routes.phpに記述します。
またフィルターはroutes.php以外にコントローラにも設定を記述できます。
いろいろ作っていくと、どんなルーティングしてるのか、どこにどんなフィルターを適用しているのかこんがらがってくることもあります。
そんなときのための便利コマンドが以下!
$ php artisan route

これで設定されているルーティングの一覧が出ます。
ちなみにartisanは「アーティザン」と読むらしいです。 上記コマンドで出力される項目は
Domain, URI, Name, Action, Before Filters, After Filters
+--------+-------------------------------------------------------------------------------+--------+----------------------------------------+----------------------+---------------+
| Domain | URI                                                                           | Name   | Action                                 | Before Filters       | After Filters |
+--------+-------------------------------------------------------------------------------+--------+----------------------------------------+----------------------+---------------+
|        | GET|HEAD login                                                                |        | LoginController@index                  |                      |               |
|        | POST login                                                                    | login  | LoginController@login                  | csrf                 | log           |
|        | GET|HEAD logout                                                               | logout | LoginController@logout                 | log                  |               |

こんな感じに出力されます。
どんなフィルターが適用されているかも出力されるので便利です。

PAGE TOP