2018-10-2
Laravelメモ
Eloquent
のall
はメモリ消費量が多いので注意
大量のレコードを処理する場合はchunk
を使おう。
Laravel(Eloquent): chunk() vs cursor() - Qiita
作った関数とか処理を手軽に試したい
tinker
を利用する。
php artisan tinker
where で OR 検索したい
同一カラムならwhereIn
を使う。
$users = DB::table('users')
->whereIn('id', [1, 2, 3])
->get();
データベース:クエリビルダ 5.6 Laravel(※「Where 節を参照」)
Laravel で常に特定のレスポンスヘッダーを設定したい
ミドルウェアで指定すればいい。
例えば、CORS に対応するためにAccess-Control-Allow
系のヘッダーを指定する場合以下のようになる。
public function handle($request, Closure $next)
{
return $next($request)
->header("Access-Control-Allow-Origin", config("app.allow-origin"))
->header("Access-Control-Allow-Credentials", "true")
->header("Access-Control-Allow-Methods", "POST, GET")
->header("Access-Control-Allow-Headers", "Content-Type");
}
Laravel はクッキーが暗号化されている
デフォルトで、ミドルウェアのEncryptCookies
でクッキーが暗号化されている。
なので、DevTools で表示されているクッキー情報(暗号化されている)と、Laravel 内のクッキー情報(復号後)は異なっているので注意。
最初に timezone 設定をしておく
デフォルトでは UTC のため、DB に保存する TimeStamp 等も UTC として保存されてしまう。
JST として保存したい場合は timezone 設定をしておくこと。
Laravel の timezone をデフォルトの UTC から JST(日本標準時)へ変更する
old ヘルパーのデフォルト値
Laravel で、バリデーション後フォームの入力値にバリデーション前と同じ値を入力させておきたい場合、old
ヘルパーを使用するが、old にはデフォルト値を設定できる
old("title", $post->title)
入れ子形式のリクエスト
"post" => array:2 [▼
"title" => "heah"
"content" => "ahe"
]
こんな形のリクエストが欲しい場合、
<div><input type="text" name="post[title]" value="{{ $values["title"] }}"></div>
<div><textarea name="post[content]">{{ $values["content"] }}</textarea></div>
こう。
多次元配列のバリデーション
<form method="post" action="{{ $actionUrl }}">
@csrf
<div><input type="text" name="post[title]" value="{{ $values["title"] }}"></div>
<ul>
<li><input type="text" name="tags[0][name]"></li>
<li><input type="text" name="tags[1][name]"></li>
</ul>
<div><textarea name="post[content]">{{ $values["content"] }}</textarea></div>
<div><button type="submit">submit</button></div>
<input name="_method" type="hidden" value="{{ $method }}">
</form>
これのバリデーションは
public function rules()
{
return [
"post.title" => "required",
"post.content" => "required",
"tags.*.name" => "required",
];
}
こう
バリデーションで min/max が働かない
min/max によるバリデーションをしたい場合、以下のように integer 等も指定して数値として認識させる必要がある。
public function rules()
{
return [
"num" => "required|integer|min:3",
];
}
マイグレーションファイルでカラムの変更をしたい
.htaccess を使用せず常時 SSL 化対応
Middleware で対応
Laravel5 で.htaccess を使用せず常時 SSL 化対応する方法
テスト関連
現在時刻を任意の値にしたい
テスト対象の関数内でCarbon::now()
とか使っていた時、テスト毎に状態が変化してしまい微妙。
なので、テスト中に現在時刻を任意の値にするために、Carbon::setTestNow()
を使用する。
test から始まらない関数をテスト関数として認識させたい
@test
と関数の直前に記述すればいい。
/*
* @test
*/
public function 有効期限が正常に判定されていることの確認()
{
~
}
ちなみに、テストの関数名は日本語にしておくとわかりやすい。