0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravel / Filament についてのメモ

Last updated at Posted at 2025-11-09

メモ。

基本機能、ディレクトリ構成など
https://qiita.com/ryokwkm/items/052fc8040027021675ec

Laravel

migrations


# migrations を実行し直す(一度テーブルを削除して作り直す)
sail artisan migrate:refresh

model

# model作成
php artisan make:model MyModelName

scope

スコープ名のルール

  • scopeXxx を定義するとクエリ側は ->xxx() で呼べます
  • 引数を取るスコープも同様に渡せます
    public static function getLikeHourlyBetween($start, $end)
    {
        return self::query()
            ->likeHourly()
            ->whereBetween('period_start', [$start, $end])
            ->get();
    }

    public function scopeLikeHourly($query)
    {
        return $query->where('action_type', 'like')
            ->where('period_type', 'hourly');
    }

    public function scopeForPeriod($query, $start, $end)
    {
        return $query->whereBetween('period_start', [$start, $end]);
    }

Filament

一覧画面

一覧画面のレコードをクリックした際に、編集画面ではなく別画面に遷移させる

デフォルトでは edit に遷移するようになっている。
これを変えたい場合は、recordUrl() を使う。
例えば edit ではなく、view画面に遷移させたい場合は以下のようになる。

public static function table(Table $table): Table
    {
        return $table
            ->columns([])
+           ->recordUrl(fn($record) => "/xxxx/{$record->getKey()}/view")


Widget

1. ウィジェットの追加
以下のコマンドでウィジェットを作成します。
コマンドを実行すると、どのタイプのウィジェットを作成するか尋ねられます。
ここで Custom を選択してください

php artisan make:filament-widget MyWidget

2. 作成されるファイル

Filamentが2つのファイルを作成します。
それぞれ編集して、好みの機能を実装してください。

PHPクラス: app/Filament/Widgets/MyWidget.php
Bladeビュー: resources/views/filament/widgets/my-widget.blade.php

3. ウィジェットを使用する
PanelProvider に設定することで、ウィジェットを表示できます。

    public function panel(Panel $panel): Panel
    {
        return $panel
            ->default()
            ~略~
            ->widgets([
                AccountWidget::class,
+               MyWidget::class,
            ])

Laravel 応用

🧐 Observerパターンとは?

  • 定義: モデルのライフサイクルイベント(creating, created, updating, deleted など)を監視し、コールバック処理を分離できるLaravel (Eloquent) のクラス。
  • 役割: モデルのCRUDに紐づく副作用処理(関連データの自動作成、ログ記録、通知など)を集約する。

Laravel (Eloquent) でモデルを扱う際、「モデルが作られたら、関連する設定も自動で作りたい」「削除されたら、ログを残したい」といった 副作用処理 が必要になることがあります。

こうした処理をコントローラーやサービスクラスに直接書くと、コードが複雑になりがちです。

そこで活躍するのが Observer(オブザーバー)パターン です。これはLaravelの標準機能で、モデルのライフサイクルイベント(作成、更新、削除など)を監視し、特定の処理を自動で実行させることができます。

実装例: NoteAccountObserver

1. Observerクラスの作成 (Artisan)

Observerクラス自体は、Artisanコマンドで簡単に生成できます。

# 基本的な作成
php artisan make:observer NoteAccountObserver

--model オプション を使うと、対象モデルのメソッド(created, updated など)が定義された雛形が自動で生成されるため、こちらが推奨です。

# NoteAccount モデル用の雛形を生成
php artisan make:observer NoteAccountObserver --model=NoteAccount

2. 登録

作成したObserverをモデルに紐付けます。App\Providers\AppServiceProvider::boot() 内で登録するのが一般的です。

// App\Providers\AppServiceProvider.php

public function boot(): void
{
    NoteAccount::observe(\App\Observers\NoteAccountObserver::class);
}

3. 処理内容

NoteAccountObserver 側で、対応するイベントのメソッド(今回は created)を定義します。

  • 挙動: NoteAccount が作成された (created イベント)、NoteAccountAiSetting が存在しなければ自動で作成する。
  • 効果: 管理画面、API、バッチなど、どの経路で NoteAccount が作られても、必ずAI設定が作成される。
// App\Observers\NoteAccountObserver.php

class NoteAccountObserver
{
    /**
     * Handle the NoteAccount "created" event.
     */
    public function created(NoteAccount $noteAccount): void
    {
        // 関連(aiSetting)が存在しなければ作成
        if (! $noteAccount->aiSetting) {
            $noteAccount->aiSetting()->create([
                // default values...
            ]);
        }
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?