ふたりはララベル (Laravel PHP Framework)

PHPフレームワークのLaravelの体験記を書いていきます。こんなタイトルのブログですが萌え系アニメは一秒たりとも観たことがありません。

2014-04-01から1ヶ月間の記事一覧

Eloquentのgetメソッドの結果が0件であることを確認する

get()やall()の結果が0件というか空であることはisEmpty()で確認できる。 $tmps = Title::all(); if($tmps->isEmpty()){ return Redirect::back(); }

Eloquent上で関連付けし、さらにWhere句を使う

Eloquent上で関連付けし、さらにWhere句を使う時は、useを使って$where句を渡す。以下の例はTitleモデルとNameモデルを関連付けして、さらにWhere句で絞込をしている。 $where = "country='Japan'"; $lists = Title::whereHas('name', function($q) use ($wh…

listsメソッドの結果に空白を足す

連想配列を作るのに便利なlists()メソッド。実際に使うときは連想配列に空白も欲しい。そういうときは普通に配列を足せばOK。 $houses = ['0' => ''] + House::all()->lists('town', 'id') ;

XserverでLaravelが動かない

XserverだとLaravelのartisanコマンドが効かない。原因はおそらくphpのバージョンだ。例えphpのバージョンを5.3以降に切り替えても「/usr/bin/env php」はphp5.1のままだ。と思ったらこんな記事が!もっと早く知りたかった。 Xserver(レンタルサーバー)でLar…

LaravelでMessageBagを使ってメッセージを表示する

MessageBagを使ってメッセージ表示する。addメソッドの第一引数はキーらしいけど、ここでは空白にした。 $messages = new Illuminate\Support\MessageBag; $messages->add('', 'この操作はできません。'); return Redirect::back()->withErrors($messages);V…

テーブルの要素を取得する

MySQL限定だけど、テーブルの要素を取得する方法。「Field」はMySQL独特の表現だ。 $title = new Title; $query = 'SHOW COLUMNS FROM ' . $title->getTable(); foreach (DB::select($query) as $column) { $columns[] = $column->Field; } これで$columnsの…

Eloquentでテーブル名を取得する

Eloquentを使えばテーブル名を取得できる。 $title = new Title; $title->getTable();

Laravelで'タグ'=>'タグ'のような配列を作る

Laravelで'タグ'=>'タグ'のような配列が欲しいときがあるかもしれない。以下の様な場合だ。 <select name="tag"> <option value="タグ">タグ</option> <select>Viewはこうすれば良い。 {{ Form::select('tag', $tags, null) }}Controllerではlists()を使う。 $tags = Tag::lists('name','name');</select></select>

XMLファイルを使ってスクリプトファイルをWindows上で実行する

XMLファイルを使ってスクリプトファイルをWindows上で実行する方法。 <package> <job> <script type="text/javascript"> <![CDATA[ WScript.Echo("Hello world!"); ]]> </script> </job> </package>

artisanコマンドのエラー対処

○artisanのmigrate createコマンドで生成したファイルは、別環境に持っていっても動かない。例えばphp artisan migrate:resetの際に、以下の様なエラーメッセージが出る。 >php artisan migrate:reset {"error":{"type":"Symfony\\Component\\Debug\\Excepti…

Laravelのバージョンをあげるとdb:seedに失敗する

デフォルトのUserモデルを使っている人が、Laravelのバージョンをあげるとdb:seedに失敗する。以下のようなメッセージが出る。 C:\xampp\futari>php artisan db:seed {"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","me ssa…

共通関数はBaseControllerを使う

共通関数的なものはBaseControllerに作ればよいのか。今まで気が付かずにファサード使ってたよ。おかげでファサードが勉強できた。

show()の引数で文字列を使う

Controllerのshowのidに数字が来たら普通にfind、文字列が来たらwhereにする。 public function show($id) { if (is_numeric($id)) { $tag = Tag::find($id); } else { $tag = Tag::where('name', '=', $id)->first(); } }

joinとlistsを併用する

listsメソッドの引数の文字列には「.」が使えない。そのためjoinとlistsを併用したい時はASで名前を変える。 というかEloquentでもjoinができたのか。 $lists = Member::select('members.name AS name', 'childs.id AS id') ->join('childs', 'childs.member…

Form::selectの効率的な書き方

Form::selectはlistsメソッドを使えば一行で書ける。コントローラ側 $lists = Movie::lists('title', 'id');ビュー側 {{ Form::select('director_id', $lists, null, ['data-rel'=>'chosen']) }}もしくはコンフィグファイルを使ってもよい。コンフィグファイ…

Bladeテンプレートを複数結合する

@includeを使えば簡単に結合できる。 <div class="form-controll"> @include('title.form') @include('title.button) </div>この場合、titleフォルダのform.blade.phpとbutton.blade.phpが読み込まれる。

MySQLの0000-00-00を避ける

MySQLの日付型に空情報を入れると自動的に「0000-00-00」に変換されてしまう。これを避けるにはnullを入れる。 $inputs = Input::all(); if(!$inputs['birthday']){ $inputs['birthday'] = null; }テーブルを作るときには日付型はnull入力を可能にしておく。…

Input::all()から特定の要素を除外する

「Input::except('password')」を使えばInput::all()からpasswordの情報を削除することができる。 $input = Input::except('password')例えばInput::all()だと余計な情報がついてしまう場合に、Input::except()で除外することもできる。事前にInput::get()を…

Laravelのlistsメソッドが超便利

クエリーの結果を連想配列にしてくれるlistsメソッド。今まで知らなかったことを後悔するレベルで便利だった。例えばidをキー、nameを値にした連想配列が欲しいときは以下のようにする。 $names = Member::all()->lists('name','id');

Formの書き方メモ

新規作成のとき {{ Form::open(['route' => 'artist.store','class'=> 'form-horizontal']) }}更新のとき {{ Form::model($artist, ['method' => 'put', 'route' => ['artist.update', $artist->id],'class'=> 'form-horizontal']) }}

サービスプロパイダーを登録するとエラーになる

○サービスプロパイダーを登録するとエラーになる コマンドでサービスプロパイダーを作って php artisan workbench futari/rei --resourcesapp/config.phpにサービスプロパイダーを追記すると 'providers' => array( 'Illuminate\Foundation\Providers\Artisa…

function($q)に変数を渡す

function($q)またはfunction($query)でfunction内に変数を渡すにはuseを使う。 $where='yen>100'; $lists = Yasai::whereHas('nedan', function($q) use($where) { $q->where($where); })->get();

ModelNotFoundExceptionがキャッチできない

App::errorでModelNotFoundExceptionがキャッチできなかった。App::errorでエラーをキャッチするときってフルパスで書かないとダメなのか。フルパスで書く例はこちら。 App::error(function(\Illuminate\Database\Eloquent\ModelNotFoundException $e) { ret…