niiyz
12/17/2014 - 4:45 AM

LaravelのEloquent ORMでCASE式を使う。 ref: http://qiita.com/niiyz/items/fc6f2f49196f3ef3ef87

LaravelのEloquent ORMでCASE式を使う。 ref: http://qiita.com/niiyz/items/fc6f2f49196f3ef3ef87

<?php
namespace LaravelTest\Controllers;

use Illuminate\Routing\Controller;
use LaravelTest\Models\User;

/**
 * ユーザーコントローラー
 * @package LaravelTest\Controllers
 */
class UserController extends Controller {

  /**
   * ユーザー一覧
   * @return void
   */
  public function getUsers() {
    // ユーザ一覧取得
    $users = User::myPage();
    print_r($users->toArray());// dd($users);
  }
}
<?php
namespace LaravelTest\Models;

use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;
use Eloquent;
use DB;

/**
 * ユーザーモデル
 * @package LaravelTest\Models
 */
class User extends Eloquent implements UserInterface, RemindableInterface {

    use UserTrait, RemindableTrait;

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'users';

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = array('password', 'remember_token');

  // マイページ用の一覧
  public function scopeMyPage($query) {
    return $query->get([
      'name',
      DB::raw("DATE_FORMAT(created_at,'%Y.%m.%d') AS date"),
      DB::raw("(CASE sex WHEN 0 THEN '男性' WHEN 1 THEN '女性' END) AS sex")
    ]);
  }
}