Laravel
参考資料
ログ出力
\Log::debug("debug ログ!");
ヘルパーを使う場合 logger("debug ログ!");
コントローラの作成
モデルの使い方
Seederの作成:php artisan make:seeder {className}
リレーション先を含めた検索(ジョブが戦士である仲間を探す時とか)
whereHasを使う。
code:php
Companion::with('job')->whereHas('job' function($query) {
$query->where('type', 'warrior');
});
ビュー周り
バリデーション
日本語化
組み込みのバリデーションルール
なんか思い違いをしてる気がする
REPL
php artisan tinker
Eloquentが作成したSQLをログに出す
サービスプロバイダの登録状況や、.envの内容がキャッシュされるらしく、削除しないと反映されなかった
ソースコード
サービスコンテナとサービスプロバイダ
Laravelのマニュアルにはこれは素晴らしいと書いている。
あるクラスのインスタンスを生成してもらうのがサービスコンテナ。
インスタンス生成のルールを定義するのがサービスプロバイダ。
UnitTestの際に包含関係のクラスをモックに差し替えたい時に、コードをいじらずに差し替えるための仕組みっぽい
つまづいた事メモ
レコード追加すると、プライマリキーが化ける
laravelのModelは、auto_incrementされることが前提となっているようで、auto_incrementしないテーブルを作成した場合、レコードを追加すると、そのインスタンスのプライマリキーが0に化ける。
auto_incrementしないテーブルは、public $incrementing = false; を定義すること。
よりツッコンだ話として、$id = $query->getConnection()->getPdo()->lastInsertId($sequence);は、SQLでSELECT LAST_INSERT_ID();になるらしく、この時、auto_incrementせずにレコード追加すると、このSQLの結果が0になる
サービスコンテナとサービスプロバイダ、ファサードに関する走り書き
LaravelにおけるDI(依存性の注入)は、Laravelがインスタンスを生成した場合に行われる
new Hoge()ではダメで、app()->make()によるインスタンス生成を行う必要がある。
ControllerやConsoleなどの、Laravelが勝手にインスタンスを作る物に関しては、DIが行われる。
なお、ModelはDIされないし、する概念もない。
DIで注入される側(中身の方)のことはサービスと呼ばれている。サービスプロバイダで登録する事で、DIの対象になる
クエリビルダのクローン
$clonedBuilder = clone $builder;