コンテンツにスキップ

ntorelabo

Front End Developer

  • pickup
  • WordPress
  • PHP
    • PHP技術者認定試験
  • Docker
  • Next.js
  • AWS
  • Laravel
  • site map
  • search

ntorelabo

Front End Developer

  • search
  • pickup
  • WordPress
  • PHP
    • PHP技術者認定試験
  • Docker
  • Next.js
  • AWS
  • Laravel
  • site map

【Laravel】SQLアンチパターンを考慮したDB

  • ホームページ
  • 【Laravel】SQLアンチパターンを考慮したDB
  • 3月, 金, 2024
  • Laravel , PHP
【Laravel】SQLアンチパターンを考慮したDB

Contents [hide]

  • 1 LaravelのDB設計でもSQLアンチパターンの知識は非常に重要
  • 2 Web回覧のDB設計
  • 3 Laravelのルーティングについてweb.phpの使い方(src/routes/web.php)
    • 3.1 Laravelコントローラーの役割
  • 4 Laravel の app\Models とは?ORM(モデル)?
    • 4.1 ORM とは?
  • 5 マイグレーションの基本概念
    • 5.1 すでにあるマイグレーションファイルを編集するべき?
    • 5.2 make:migration の命名ルール(おすすめ)
    • 5.3 変更内容(マイグレーションによって データベースに実際に追加されたカラムなど)を確認するには、Laravel Tinker

LaravelのDB設計でもSQLアンチパターンの知識は非常に重要

SQLアンチパターンとは、データベース設計やSQL文の記述において、一見問題なく動作するが、実際には保守性・性能・拡張性などの面で問題を引き起こす悪い設計パターンのことです。

SQLアンチパターン
https://www.oreilly.co.jp/books/9784873115894
https://www.oreilly.co.jp//books/9784814400744/

一家?に一冊「SQLアンチパターン」
https://qiita.com/shimamura_io/items/7ca604933f526a2cdfa9

LaravelはEloquent ORMやマイグレーション機能があるため「フレームワークが良しなにやってくれる」と思いがちですが、実際は設計レベルでの問題はフレームワークでは解決できません。

Laravelを使っていても、SQLアンチパターンで紹介されている「ジェイウォーク」「IDリクワイアド」「外部キー嫌い」などの問題は普通に発生します。

フレームワークの便利機能と併せて、基本的なDB設計原則を理解しておくことが大切ですね。

Web回覧のDB設計

sqlddlダウンロード

Laravelのルーティングについてweb.phpの使い方(src/routes/web.php)

  • URLとどのファイルを表示させるか紐づけます
  • URLパラメータの受け取りをします

Laravelルーティングの処理パターン routes/web.php ブラウザリクエスト 直接View返却 Controller処理 クロージャ処理 パターン1: 直接ビュー表示 パターン2: Controller経由 パターン3: クロージャで処理

Laravelコントローラーの役割

Laravelでは、ルートで処理されるリクエストの処理を、コントローラーに記述します。

artisanコマンドでコントローラーを作成

# 基本的なコントローラー作成
php artisan make:controller UserController

▼app/Http/Controllers/UserController.phpが作成されます

namespace App\Http\Controllers;  // 名前空間の自動設定

class UserController extends Controller  // クラスの自動生成
{
    // 基本的なメソッド(--resourceオプション使用時)
    public function index() { }    // 一覧表示
    public function show($id) { }  // 詳細表示
}
artisanコマンドの動作 $ php artisan make:controller UserController app/Http/Controllers/ UserController.php コントローラークラスの自動生成完了
  • app/Http/Controllersディレクトリに新しいファイルを作成
  • 基本的なクラス構造を自動生成
  • 必要な名前空間とクラスのインポートを設定

Laravel の app\Models とは?ORM(モデル)?

基本的に Laravel では app\Models フォルダ配下に「各データベーステーブルに対応する ORM(モデル)」を作成します。

ORM とは?

ORM(Object-Relational Mapping) は、「データベースの行と、プログラム上のオブジェクトを自動で対応させる仕組み」です。

Objects ORM Database

Laravel の場合、この ORM 機能を Eloquent(エロクアント) という名前で提供しています。

メリットとしては下記があります

  • SQLを直接書かずに済む
  • クエリビルダーよりさらに直感的
  • テーブルのリレーションもオブジェクトっぽく書ける

マイグレーションの基本概念

マイグレーションは「データベースの構造(テーブルやカラム)をコードで管理するための仕組み」です。

SQL を直接書かず、PHPのコードで DB を構築・変更できる

すでにあるマイグレーションファイルを編集するべき?

基本的には 過去のマイグレーションファイルは上書きしません。新しいファイルを追加します。

make:migration の命名ルール(おすすめ)

php artisan make:migration add_カラム名_to_テーブル名_table
php artisan make:migration remove_カラム名_from_テーブル名_table
php artisan make:migration create_テーブル名_table
php artisan make:migration update_テーブル名_table

生成されたマイグレーションファイルの up メソッドを以下のように記述:
Laravelのマイグレーションファイルで使われる up() と down() にはそれぞれ次のような意味と役割があります。

  • up() メソッド:構造を「適用」する処理
    php artisan migrate 実行時に呼ばれる
  • down() メソッド:構造を「元に戻す」処理
    php artisan migrate:rollback 実行時に呼ばれる

マイグレーションファイルの編集が完了したら、php artisan migrate を実行して、DBに変更を適用。

変更内容(マイグレーションによって データベースに実際に追加されたカラムなど)を確認するには、Laravel Tinker

php artisan tinker
>>> Schema::getColumnListing('users');

Laravel Tinker とは?

Tinker(ティンカー) は、Laravel に付属している インタラクティブなコマンドラインツール です。

最近の投稿
  • WordPressサイトのサブディレクトリ→サブドメイン移行手順 2025年7月6日
  • Laravelでリッチテキストエディタで使いやすい画像アップロード機能を実装(TinyMCE) 2025年6月22日
  • 【PHP】出力バッファリング制御 2025年5月22日
  • basic認証のパスワードを忘れた場合 2025年5月14日
  • PHP 8.0〜から実装で便利な機能(名前付き引数、match) 2025年5月11日
  • さくらインターネットからWHOIS登録メールアドレスの利用廃止のメールが来た 2025年5月9日
  • スムーズにスクロールする処理をjQueryで実装 2025年5月5日
  • Gemini for Google Workspace 活用術 2025年4月24日
  • Google Cloud の始め方 2025年4月20日
  • 【PHP】switch分の書き方、PHP 7.3 から PHP7.4の変更点 2025年4月19日
  • 【PHP】新しい方の指定方法「nullable」 2025年3月25日
  • 「PHPでJSONを扱う」json_encodeとjson_decode完全ガイド 2025年3月23日
  • 【WordPress自作テーマ開発】固定ページを自動作成する方法(下層ページ実装) 2025年3月18日
  • 【PHP】プロトコル / ラッパーについて(file:// php:// http:// https://) 2025年3月17日
  • 【PHP】stdClass を使用して(object) でキャスト 2025年3月16日
  • モダンなPHPコードで使用!無名関数の使い方 2025年3月15日
  • Cursor 便利な機能まとめ、Project Rules 2025年3月15日
  • PHP セッション名の変更方法と php.ini の記述方法まとめ 2025年3月12日
  • 【PHP】関数内でグローバル変数を使用するためには global キーワード 2025年3月10日
  • 【php8上級/準上級試験】模擬問題解説 問題30 strtotime() 2025年3月4日
About Us

Ready To Start Work With Us?

Felis consequat magnis est fames sagittis ultrices placerat sodales porttitor quisque.

Get a Quote
recent posts
  • WordPressサイトのサブディレクトリ→サブドメイン移行手順
  • Laravelでリッチテキストエディタで使いやすい画像アップロード機能を実装(TinyMCE)
  • 【PHP】出力バッファリング制御
  • basic認証のパスワードを忘れた場合
  • PHP 8.0〜から実装で便利な機能(名前付き引数、match)
  • さくらインターネットからWHOIS登録メールアドレスの利用廃止のメールが来た
  • スムーズにスクロールする処理をjQueryで実装
  • Gemini for Google Workspace 活用術
Opening Hours
Week Days 10:00 - 17:00
Saturday 10:00 - 15:00
Sunday Day Off
Contact us
popular posts
  • WordPressで画像を拡大表示するなら「Firelight Lightbox」(旧名:Easy Fancybox) 1.1k件のビュー
  • 【WordPress】カスタムフィールド作成の仕方「ACF」Advanced Custom Fieldsの使用法 743件のビュー
  • 【チートシート】Linuc Lv1-102 実務での使用例も解説 613件のビュー
  • My-Snow-Monkey使用例、子テーマによるカスタマイズ 513件のビュー
  • 【WordPressエラー】「Warning: Undefined variable $post in …」「Warning: Attempt to read property “ID” on null in …」 466件のビュー
  • Twitter、Facebookのタイムラインを埋め込む 415件のビュー
  • 【Next.js】ライブラリ使わないでカルーセルスライダー 304件のビュー
  • ローカル、グローバルIPアドレスの違いと確認手順 294件のビュー
  • AWS認定ソリューションアーキテクト-アソシエイトレベル 248件のビュー
  • WordPress自作、カスタマイズ 229件のビュー
Search
Copyright © 2025 ntorelabo | Powered by Desert Themes