環境毎 DI
参照
https://qiita.com/buntafujikawa/items/e276f04e8d0e01bcb8bd
https://juno-engineer.com/article/laravel-dependency-injection/
https://ascii.jp/elem/000/000/270/270027/
サロゲートキー
SQLアンチパターンにIDリクワイアドがあるが
Laravelはサロゲートキーに準拠した方が良さそう?
参照
https://teratail.com/questions/156160
https://gist.github.com/bz0/f30312ecbb5d7769a936f6f10818a931
findOrFail()とfirstOrFailの使い分け
主キーに対して検索する場合は、findOrFailを使う。主キー以外のカラムに対して検索する場合は、firstOrFailを使う
参考
https://tektektech.com/laravel-find-or-fail-other-key/
トランザクション
トランザクションの書き方は2通りある
・返り値、引数、リトライ回数を指定することが可能
try {
DB::transaction(function () {
// DB処理
}, 3);
} catch (Exception $e) {
// 例外処理
}
・リトライ回数を指定することが可能
DB::beginTransaction(); // tryの外が良い?
try {
// DB処理
DB::commit();
} catch (Exception $e) {
DB::rollback();
// 例外処理
}
例外クラス 命名 参考
独自で例外クラスを切る時に命名の参考になる
例外の命名の参考にするために Laravel の例外すべて漁ってみた
.envとphp artisan config config:cache
[root@ laravel9-api-test]# php artisan config:clear
上記コマンドは
・「.env」を修正した場合に実行する
・ローカル環境以外では、随時実行する必要がある
・ローカル環境において非推奨とのこと
【Laravel】.envとphp artisan config:cacheを正しく理解する
laravel-debugbar
ORMが発行しているSQLクエリやN+1問題を検知するデバッグツール
composer require --dev barryvdh/laravel-debugbar
参考
https://dara-blog.com/laravel-debugbar
Laravelインストール後 初期設定 参考
Laravelでの開発でいつもやってること
Laravelの脆弱性対策について
Laravelプロジェクトインストール
# まずはディレクトリ構造を確認する
[root@ www]# cd /var/www
[root@ www]# ls
cgi-bin exment wordpress
# composerでLaravel9をインストールする
# 「-prefer-dist」オプションでzipからダウンロードする。
[root@ www]# composer create-project --prefer-dist laravel/laravel laravel9-pj-name "9.*"
# Laravelプロジェクトが作成されていることを確認する
[root@ www]# ls
cgi-bin exment laravel9-pj-name wordpress
Factory、faker
テーブル1つをFactory、fakerをするサンプル
https://codelikes.com/laravel-faker/
リレーション
artisanコマンド
マイグレーション系
マイグレーションファイルを生成する
・モデルとマイグレーションファイルの両方を生成
# php artisan make:model Book --migration
・マイグレーションファイル単体だけを生成
# create_テーブル名_table
# 中間テーブル 命名は単数系_単数系
php artisan make:migration create_category_item_table
未処理のマイグレーションをすべて実行する。
※未処理のマイグレーション:下記に該当するマイグレーションを指す
・laravel-pj-name/database/migrations直下にマイグレーションファイルが存在していてるが、DB上にはテーブルが未存在である
・「migrations」テーブルに記録されていない
[root@ laravel9-api-test]# php artisan migrate
INFO Preparing database.
Creating migration table ............................. 45ms DONE
INFO Running migrations.
2014_10_12_000000_create_users_table ................. 41ms DONE
2014_10_12_100000_create_password_resets_table ....... 15ms DONE
2019_08_19_000000_create_failed_jobs_table ........... 30ms DONE
2019_12_14_000001_create_personal_access_tokens_table 27ms DONE
既存のテーブルにカラムを追加する
・既存のマイグレーションに追記する方法の場合
既存のマイグレーションを直接修正した後に下記コマンドを実行する。既存のデータは消えてしまう。
よく使う
# 全テーブルをドロップしてから up() を実行してからSeedを実行する
[root@ laravel9-api-test]# php artisan migrate:fresh --seed
# 全テーブルをドロップしてから up() を実行する。似ているコマンドrefreshがある
[root@ laravel9-api-test]# php artisan migrate:fresh
・新規でマイグレーションファイルを新規作成する方法の場合
https://codeclub965.com/?p=2238
https://programing-school.work/laravel-migration-add-column/
https://dkssksk.com/laravel-8-migration-column/
その他
・Controllerクラス
・空メソッド
を同時に作成する
[root@ laravel9-api-test]# php artisan make:controller UserController --api
【結果】下記コントローラーが作成される
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
カスタムRequestを作成する
[root@ laravel9-api-test]# php artisan make:request Api/ApiRequest
Resourceクラスを作成する
[root@ laravel9-api-test]# php artisan make:resource UserResource
コメント