Laravel備忘録一覧

環境毎 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

コメント

タイトルとURLをコピーしました