中級者向け

Laravel

【Laravel】Eloquentのキャスト・アクセサ・ミューテタの使い分け

こんにちは、かつコーチです。前回はソフトデリートによる安全な削除の仕組みを解説しました。今回は、Eloquentモデルの値を「取得するとき」「保存するとき」に自動加工できる3つの機能、キャスト・アクセサ・ミューテタを扱います。似たような役割...
CakePHP

【Laravel】ソフトデリート(SoftDeletes)の使い方

こんにちは、かつコーチです。前回はトランザクションでデータ整合性を守る方法を解説しました。今回は、削除処理を「取り消せる形」にしておくための機能、SoftDeletes(ソフトデリート)を扱います。「うっかり削除してしまった」というミスは、...
Laravel

【Laravel】トランザクション(DB::transaction)でデータ整合性を守る

こんにちは、かつコーチです。前回はページネーションの実装方法を解説しました。今回は、複数のテーブルを更新する処理で必ず意識しておきたい「トランザクション」を扱います。「一部だけ更新が成功して、一部だけ失敗する」という状態は、データベースの整...
Laravel

【Laravel】LengthAwarePaginatorでページネーションを実装する

こんにちは、かつコーチです。前回はN+1問題とeager loadingについて解説しました。今回は、一覧画面を作るときに必ずと言っていいほど必要になる「ページネーション」を扱います。Laravelにはpaginate()という便利なメソッ...
Laravel

【Laravel】N+1問題とは?eager loading(with)で解決する

こんにちは、かつコーチです。前回はQuery Builderの基本を扱い、Eloquentとの使い分けを紹介しました。今回は、Eloquentでリレーションを扱う人が必ずと言っていいほど一度は踏む落とし穴、N+1問題を取り上げます。「画面表...
Laravel

【Laravel】Query Builderの基本:Eloquentを使わないクエリの書き方

こんにちは、かつコーチです。前回はFactoryでテストデータを効率よく作る方法を紹介しました。これまでの記事では Article::where(...) のようにEloquentモデルを経由してデータを取得してきましたが、実はLarave...
Laravel

【Laravel】Factoryでダミーデータを効率よく作る

こんにちは、かつコーチです。前回はSeederの3つの実装方法を紹介し、大量データにはFactoryとの組み合わせが向いていると触れました。今回はそのFactoryを詳しく掘り下げていきます。「テストデータを100件作りたいけど、1件ずつ書...
Laravel

【Laravel】Seederでテストデータを入れる3つの方法

こんにちは、かつコーチです。前回は多対多リレーション(belongsToMany)を扱いました。実際にリレーションの動きを確認しようとすると、記事・タグ・中間テーブルにそれぞれデータを手入力するのは大変ですよね。そこで今回は、テストデータを...
Laravel

【Laravel】多対多リレーション(belongsToMany)を実装する

こんにちは、かつコーチです。前回は hasMany と belongsTo を使って、1対多のリレーションを扱いました。今回は、Eloquentのリレーションの中でもつまずく人が多い「多対多(belongsToMany)」を扱います。「1つ...
Laravel

【Laravel】Eloquentのリレーション:hasMany・belongsToの使い分け

こんにちは、かつコーチです。前回はEloquentの基本操作を解説しました。実際のアプリケーションでは、「投稿」と「コメント」、「ユーザー」と「投稿」のように、テーブル同士が関連し合っているケースがほとんどです。今回は、Eloquentでテ...
Laravel

【Laravel】Route Model Bindingで自動的にモデルを取得する

こんにちは、かつコーチです。前回はNamed Routeについて解説しました。今回は、URLのパラメータを扱うコントローラをもっとシンプルに書ける「Route Model Binding」を紹介します。「IDを受け取って、モデルを検索して、...
Laravel

【Laravel】Named Routeでルートに名前をつけるメリット

こんにちは、かつコーチです。前回は、リダイレクト処理のパターンについて解説しました。その中で redirect('/mypage') のようにURLを直接書くコードが何度か出てきましたが、実は現場のLaravelコードではあまり見かけません...
PHP

【Laravel】Bladeコンポーネントで再利用可能なパーツを作る

こんにちは、かつコーチです。前回は、Bladeテンプレートの基本文法を解説しました。@if や @foreach、@extends などを使えば、動的なHTMLはひと通り書けるようになります。ただ、実際に画面を作っていくと、同じ見た目のパー...
PHP

【PHP】なぜフレームワークを使うのか?Laravelを学ぶ前に知っておきたいこと

こんにちは、かつコーチです。久しぶりにPHPネタです。前回は、、、素のPHPで簡易的なルーティングとコントローラの仕組みを自作してみました。たった数ページの機能を作るだけでも、URLの振り分けやファイルの読み込み管理など、地味な手間がたくさ...
SQL

【SQLite】SQLiteはどんなアプリに向いているか?MySQL・PostgreSQLとの比較検証

こんにちは、かつコーチです。SQLite編もいよいよ最終回です。これまでファイルベースの仕組み、型アフィニティ、トランザクション、インデックス、WALモード、バックアップと、SQLite固有の特徴を一通り解説してきました。最終回となる今回は...
SQL

【SQLite】SQLiteのバックアップとVACUUMコマンド

こんにちは、かつコーチです。WALモードまで解説してきて、SQLiteの内部の仕組みはかなり理解が深まったのではないでしょうか。今回は、実際に運用していく上で欠かせないバックアップとVACUUMコマンドを扱います。「ファイルをコピーするだけ...
SQL

【SQLite】トランザクションと同時アクセスで気をつけたいこと

こんにちは、かつコーチです。前回はSQLite独自のデータ型・型アフィニティを解説しました。今回は、SQLiteを実運用する上で最も誤解が多い同時アクセスの挙動について解説します。「SQLiteは同時に書き込むと落ちる」という話を聞いたこと...
SQL

【SQLite】SQLiteのデータ型と型アフィニティという独自の仕組み

こんにちは、かつコーチです。ファイルベースの仕組みを理解したところで、今回はSQLiteを使う上で必ずつまずくデータ型の話をします。MySQLやPostgreSQLに慣れていると、SQLiteのデータ型の扱いには驚くはずです。「なぜINTE...
JavaScript

【JavaScript】ドラッグ&ドロップを実装する

こんにちは、かつコーチです。前回はトースト通知を扱いました。今回は、タスク管理ツールのカードや並べ替え可能なリストでおなじみのドラッグ&ドロップを、素のJavaScriptで実装していきます。ドラッグ&ドロップとは?HTML5 Drag a...
JavaScript

【JavaScript】トースト通知を実装する

こんにちは、かつコーチです。前回はカウントアップアニメーションを扱いました。今回は「保存しました」「エラーが発生しました」といった操作結果を、画面の隅にさりげなく表示するトースト通知を実装していきます。alert()と違って処理を止めず、数...