目次
1. 機能一覧
2. テーブル設計
3. 工夫した点
4. 振り返り
① 機能一覧と詳細
ユーザー登録 / ログイン
・Hash::make()を用いてパスワードをハッシュ化して保存。
・Auth::attempt()でユーザー認証を行い、無効なユーザー情報でログインされることを防ぐ。
TOPページ (ブログ一覧)
・全ユーザーのステータスが公開のブログだけを表示。
ブログ詳細ページ (TOPページから移動したとき)
・ブログとそのコメントを一度に取得するためにBlog::with('comments') を使ってEager Loadingを実施し、N+1クエリ問題を防ぐ。
マイページ
・Auth::id()でログインユーザーのIDを取得し、そのユーザーが作成したブログを表示 。
ブログ詳細ページ (マイページから移動したとき)
・Auth::id() を使用して、ログイン中のユーザーだけが自分のブログを作成・編集・削除できるようにする。
ブログとコメントのCRUD機能
モデルのリレーション:
・User と Blog: 1対多 (1 User : 多 Blog)
・User と Comment: 1対多 (1 User : 多 Comment)
・Blog と Comment: 1対多 (1 Blog : 多 Comment)
② テーブル設計
③工夫した機能
(1) カテゴリ機能 <多対多のリレーション>
ブログとカテゴリの多対多リレーションで設計し、1つのブログが複数のカテゴリに属し、1つのカテゴリが複数のブログを持つよう実装。この設計により、ユーザーがブログをカテゴリ別に絞り込んで検索することができる機能を提供。
(2) 公開・非公開機能
ブログの公開状態をワンクリックで切り替えられるシンプルなトグル機能を実装することで、ユーザーがブログを簡単に公開・非公開に切り替えられるよう実装。statusカラムを使い、0(非公開)と1(公開)の2つの値で管理。
(3) お気に入り機能 <多対多のリレーション>
ユーザーとブログの間に多対多のリレーション: 中間テーブル favorite を使用して、ユーザーとブログの関係を管理。
・Userモデル
・Blogモデル
・toggle メソッド
favorites() リレーションを使って、特定のブログがすでにユーザーのお気に入りリストにあるかを確認し、存在すれば detach() で削除し、存在しなければ attach() で追加。トグル操作によりお気に入りの状態の切り替えが可能になり、お気に入りされたブログだけを表示。
④ 振り返り
学んだこと
1. ユーザーの認証とアクセス管理
・セキュリティ強化:Hash::make() でパスワードをハッシュ化し、Auth::attempt() でユーザー認証を行うことで、安全な認証プロセスを実現 。
・アクセス制御:Auth::id() を使用することで、作成・編集・削除などの権限やブログの表示範囲などを制御。
2. 多対多のリレーション設計
中間テーブルを使用してリレーションを管理することで、データの操作や表示を柔軟かつ効率的に行えるようになった。データベース設計やモデルの関係を適切に構築することができるようになり、システムの拡張性が向上。
今後の課題