WinRoadのLaravel4初心者講座

次世代PHPフレームワークのLaravel4を初心者向けに解説して参ります。

Winroad徒然草の管理人がお届けします
API

Builder::lists()メソッド

Illuminate\Database\Query\Builder::lists()メソッドは、DBクラスやModelクラスのメソッドチェーンとして使用します。

Builder::lists(カラム,キー)

Builder::listsメソッドは、第1引数で指定したカラムの値のリスト配列を生成します。第2引数は、オプションでキーを指定します。デフォルトはNULL値です。

基本例

//Fluentクエリービルダー
DB::table('users')->lists('email');

//Eloquent ORM
User::lists('email');

//上記のリストを表示する
echo '<ul>';
foreach($sql as $s):
echo '<li>'.$s.'</li>';
endforeach;
echo '</ul>';
  • 10行目:$s->emailではなくて、$sである点に注意(勘違いしやすい)。

基本例2

//第2引数を指定した例題
Route::get('user',function(){
$sql=User::lists('email','id');
echo '<ul>';
foreach($sql as $key=>$s):
echo '<li>ID'.$key.'のemailは'.$s.'</li>';
endforeach;
echo '</ul>';
});
  • 3行目:第2引数にidをキーとして指定しています。
  • ブラウザで表示すると下記のようになります。
    laravel4_082

Builder::orderBy()メソッド

Illuminate\Database\Query\Builder::orderBy()メソッドは、DBクラスやModelクラスのメソッドチェーンとして使用します。

Builder::orderBy(カラム,ソート条件)

Builder::orderBy()メソッドは、ORDER BY句を生成します。orderByメソッドは第1引数で、指定したカラムの値でレコードを並べ替え(ソート)します。第2引数はオプションで昇順または、降順の並べ替え条件(asc,desc)を指定します。デフォルトはascです。

基本例

//Fuluentクエリービルダー
DB::table('users')
->orderBy('age','desc')
->get();

//Eloquent ORM
User::orderBy('age','desc')->get();
  •  ageカラムを降順(数字の大きい順)に並べ替えたデータを取得します。

Builder::first()メソッド

Illuminate\Database\Query\Builder::first()メソッドは、DBクラスやModelクラスのメソッドチェーンとして使用します。

Builder::first()

Builder::first()メソッドは、クエリを発行し、最初の結果を取得します。引数はオプションで、表示するカラム名を配列で指定します。デフォルトは全カラムです。

基本例

//Fluentクエリービルダー
DB::table('users')->first();

//Eloquent ORM
User::first();

getとの違い

getメソッドは、複数のオブジェクトを取得するのに対して、firstメソッドは、オブジェクトを一つ(最初のオブジェクト)しか取得しません。ですので、引き渡したデータの表示方法には明確な違いがありますので、注意してください。

getで一つの値を取得した場合

Route::get('user',function(){
//id番号が1のデータを取得
$sql=DB::table('users')->where('id','=',1)->get();
//取得したデータの表示
echo $sql[0]->email;
});

firstで値を取得した場合

Route::get('user',function(){
//id番号が1のデータを取得
$sql=DB::table('users')->where('id','=',1)->first();
//取得したデータの表示
echo $sql->email;
});
  • 上記に、getとfirstで同じようなクエリを生成してみました。取得したデータは両方ともid番号1のデータですが、getとfirstでデータの表示方法が違うのがわかりますでしょうか。getの場合は複数のオブジェクトを抽出したのですが、結果として一つしかデータがなかったのに対し、firstの場合は元々データの数に関係なく、一つのデータ(最初のデータ)しか取得しないのです。ですので、データの表示方法に違いが生じます。

Builder::whereBetween()メソッド

Illuminate\Database\Query\Builder::whereBetween()メソッドは、DBクラスやModelクラスのメソッドチェーンとして使用します。

Builder::whereBetween(カラム,範囲,論理演算子)

Builder::whereBetweenメソッドは、BETWEEN演算子を使ったWHERE句を生成します。第1引数が対象のカラム名、第2引数に範囲(最小値と最大値)を配列で指定します。第3引数は、オプションで論理演算子を指定します。デフォルトはandです。尚、第3引数にorを指定した場合、orWhereBetweenメソッドと同じです。

基本例

//Fuluentクエリービルダー
DB::table('users')
->whereBetween('age',array(20,30))
->get();

//Eloquent ORM
User::whereBetween('age',array(20,30))->get();
  • ageカラムの値が20~30の間の範囲のデータを抽出します。

BETWEEN演算子

BETWEEN演算子は、値段や年齢など範囲で値を選択したい場合に便利です。

SQL文

WHERE 対象値 BETWEEN 最小値 AND 最大値

Builder::where()メソッド

Builerクラスのwhereメソッドは、DBクラスやModelクラスのメソッドチェーンとして使用します。

Builder::where(カラム,演算子,値,論理演算子)

Illuminate\Database\Query\Builder::where()メソッドは、WHERE句を生成します。第1引数に比較するカラム名、第2引数に演算子(比較演算子やLIKE演算子)による条件式、第3引数に比較する値を指定します。第4引数には、オプションで論理演算子を指定します。デフォルトはandです。尚、第4引数に、orを指定するとorWhereメソッドと同じです。

基本例

//Fluentクエリービルダー
DB::table('users')->where('age','<',20)->get();

//Eloquent ORM
User::where('email','LIKE','%gmail%')->get();
  • 2行目:ageカラムの値が20以下のデータを抽出します。
  • 5行目:emailカラムにgmailという文字列が含まれるデータを抽出します。

WHERE句で使える演算子

下記にSQLのWHERE句で使える演算子の一覧を表記しておきます。

  • =
    等しい
  • >
    大きい
  • <
    小さい
  • >=
    大きい、もしくは等しい
  • <=
    小さい、もしくは等しい
  • AND
    2つの条件を結合し、両方の条件が真
  • OR
    2つの条件のうち、どちらか一方が真
  • NOT
    式の結果を反転
  • BETWEEN a AND b
    対象のフィールドがaとbの範囲内
  • IN
    対象のフィールドが式の一覧の一つに一致
  • LIKE
    対象のフィールドがパターンに一致

Builder::get()メソッド

Builerクラスのgetメソッドは、DBクラスやModelクラスのメソッドチェーンとして使用します。

Builder::get()

Illuminate\Database\Query\Builder::get()メソッドは、QueryビルダーやEloquent ORMで生成したクエリを実際に発行する作業を行い、データベースオブジェクトを取得します。

基本例

//Fluentクエリービルダー
DB::table('users')->get();

//Eloquent ORM
User::where('email','LIKE','%gmail%')->get();

DB::table()メソッド

DBクラスのtableメソッドは、データベーステーブルに対してFuleuent Queryビルダーのクエリを開始します。

DB::table(テーブル名)

DB::tableメソッドは、引数で指定したテーブルに対するクエリを開始します。DB::select(‘SELECT * FROM テーブル名)メソッドと同じクエリを生成します。

基本例

Route::get('user',function(){
 $sql=DB::table('users')->get();
 echo "<ul>";
 foreach($sql as $s):
 echo "<li>".$s->email."</li>";
 endforeach;
 echo "</ul>";
 $sql=DB::select('SELECT * FROM users');
 echo "<ul>";
 foreach($sql as $s):
 echo "<li>".$s->email."</li>";
 endforeach;
 echo "</ul>";
});
  • 2行目と8行目は、全く同じ結果になります。ブラウザで表示すると下記のようになります。
    laravel4_081
  • つまり、DB::tableメソッドは、デフォルトで、QueryビルダーのSELECT文を発行します。同様に下記とも同じ結果になります。
    DB::table(‘users’)->select(‘*’)->get();

Model::paginate()メソッド

Model::paginateメソッドは、セレクト文のページネーターを取得します。

Model::paginate(項目数,取得カラム配列)

Model(モデル名)::paginateメソッドは、第1引数で指定した項目数のページネーターを取得します。第2引数は、取得カラムの配列を指定します。第1引数の初期値はNULL値で、第2引数の初期値は全カラムです。

基本例

//ルーター
Rooute::get('user',function(){
$data['users']=User::paginate(10);
return View::make('user/view',$data);

//ビュー
@foreach($users as $user)
<ul>
<li>{{ $user->id }}</li>
<li>{{ $user->name }}</li>
<li>{{ $user->email }}</li>
</ul>

@endforeach
  • 3行目:paginateメソッドの前に何も指定しなければ、全モデルのページネーターを取得します。例では、10項目ごとのページネーターを取得します。

Model::create()メソッド

Model::createメソッドは、新しいモデルを保存してインスタンスをリターンします。

モデル名::create(新規作成データの連想配列)

モデル名::createメソッド(Modelクラスは今後、Model::createのように記述します)は、モデルのインスタンス化と与えられた連想配列のデータ(キーと値)の保存を同時に行います。尚、このModel::createメソッドを使用するには、複数代入が出来るようにあらかじめモデルに記述しておく必要があります。

モデルの設定

//複数代入可能な属性を定義する
protected $fillable=array('first_name','last_name','email');
//複数代入不可能な属性を定義する
protected $guarded=array('id','password');

一般的なデータの作成

複数代入が出来ない場合は、下記のようにデータを作成します。

$data=new User();
$data->username='nakada';
$data->password='0123';
$data->email='nakada@gmail.com';
$data->save();

HTML::link()メソッド

HTML::linkメソッドは、基本的に下記のように記述します。

HTML::link(URL,タイトル,属性の配列,セキュア)

HTML::linkメソッドは、第1引数で指定したURLへのリンクを生成します。URLの指定は、相対指 定(相対パス)の場合 は、ベースURLがlocalhost/laravel4/publicとなります。絶対URL(完全パス)は、http://から全URL文字列を指定します。第2引数は、リンクに表示する文字列(タイトル名)を指定します。第3 引数は、オプションで属性を連想配列で指定します。第4引数は、オプションで、セキュア(HTTPS)の真偽値(trueまたは、false)を指定します。デフォルトはNULL値です。尚、絶対URLで指定した場合、第4引数は無視されます。

基本例

<li>{{ HTML::link('/','Top') }}</li>
<li>{{ HTML::link('http://laravel4.winroad.jp','Laravel4初心者講座',array('class'=>'brand'),true) }}</li>
  • 上記例は、下記のようなタグを生成します。
    <li><a href="http://localhost/laravel44/public">Top</a>></li>
    <li><a href="http://laravel4.winroad.jp" class="brand">Laravel4初心者講座</a></li>

尚、第4引数をtrue指定する場合は、下記のメソッドが利用できます。

HTML::secureLink(URL,タイトル,属性の配列)

HTML::secureLinkメソッドは、linkメソッドの第4引数にtrueを指定したのと全く同じです。