Unity(C#)初心者・入門者向けチュートリアル ひよこのたまご

AndroidやiOS向けアプリを簡単に作れるゲーム開発環境Unity(ユニティ)の使い方を、チュートリアル方式で一緒に学びましょう!

【Laravel】モデルから切り離してScopeクラスを作成する

PHPバージョン:7.1.14
Laravelバージョン:5.7.9

前回はグローバルスコープについてでした!
グローバルスコープは汎用的な処理が多いため、
モデルから切り離しScopeクラスとして
独立させると便利です!


Scopeクラスの作成

まずはScopeクラスを作成します!
app>Scopesディレクトリを作成し、
ScopeArticle.phpというファイルを作成します!

<?php
namespace App\Scopes;

use Illuminate\Database\Eloquent\Scope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
use Carbon\Carbon;

class ScopeArticle implements Scope {
    public function apply(Builder $builder, Model $model) {
        $builder->where('updated_at', '>', Carbon::now()->subYear(3));
    }
}

app>Scopes?ScopeArticle.php

implementsにより、Scopeを継承します。
Scopeを使うためuse宣言もします。

Scopeインターフェイスとして定義されているapplyメソッドを使います。
やっていることは、グローバルスコープの記事内容と全く同じです。

「updated_at(最終更新日)が現在より3年前の記事は表示しない。」
という内容のスコープを定義しました。
CarbonはLaravel標準搭載の日付を管理するクラスです。
Carbon::now()->subYear(3)
で、「現在から三年を引いた日」となります。

モデルでScopeクラスを適用

Articleモデルにて、ArticleScopeクラスを適用していきます。

<?php

namespace App\Models;

use App\Scopes\ScopeArticle;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;

class Article extends Model
{
    protected $guarded = ['id'];

    protected static function boot() {
        parent::boot();
        static::addGlobalScope(new ScopeArticle);
    }
}

app>Models>Article.php

グローバルスコープの記事に使った
"addGlobalScope"メソッドの引数として、
先ほど作成したScopeArticleクラスをnewしています。
"App\Scopes\ScopeArticle"のuse宣言も忘れずに。

以上でScopeクラスのモデルへの適用完了です。

今回はここまでです、ありがとうございました〜!