sql >> データベース >  >> RDS >> Mysql

Eloquentモデルで複雑な仮想列を作成するにはどうすればよいですか?

    解決策1:グローバルスコープを使用してフィールドを選択ステートメントに追加する

    仮想列に関する1つの問題は、それを妨げない場合、Eloquentがそれらを更新しようとすることです。 $ fillable配列から除外して、グローバルスコープ を使用できます。 モデルに仮想列を追加するには、次のようにします。

    protected static function boot()
    {
        parent::boot();
    
        static::addGlobalScope('next_action', function (Builder $builder) {
            $builder->addSelect(DB::raw('DATE_ADD(updated_at, INTERVAL days DAY) AS next_action'));
        });
    }
    

    使用している日付関数はsqliteなどのデータベースでは機能しないため、これによりモデルがMySQLに結合されることに注意する必要があります。

    解決策2:MySQLビューを使用する

    通常、複数の計算フィールドがある場合は、MySQLビューを作成します。必要なすべての計算フィールドを使用してビューを作成すると、クエリスコープを気にすることなく、そのビューの新しいEloquentモデルを作成できます。

    1つの注意点は、もちろんこのモデルでは作成/更新/削除を使用できないことですが、モデルを表示目的でのみ使用している場合は、問題にはなりません。




    1. 結果セットの行に自動番号を付けるためのPure-SQL手法

    2. MYSQLエラー:1045(28000):ユーザー'root'@'localhost'のアクセスが拒否されました

    3. mysql delete、autoincrement

    4. 全文検索と2億以上のレコードのデータベース