Laravel で PHP Artisan を使用してデータベース ビューの移行を作成するにはどうすればよいでしょうか? 質問する

Laravel で PHP Artisan を使用してデータベース ビューの移行を作成するにはどうすればよいでしょうか? 質問する

実際、以下の手順で PHP Artisan を使用して Laravel の SQL ビューを作成できました。

ステップ 1. 以下のコマンドを実行します。

php artisan make:migration create_overall_report_views

ステップ2。

移行ファイルを開き、以下のコードを追加します。

class CreateOverallReportView extends Migration 
{
  /**
  * Run the migrations.
  *
  * @return void
  */
  public function up()
  {
    //
    DB::statement("
      CREATE VIEW views_overall_report AS
      (
        SELECT er.user_id as user_id, e.id AS entities_id, 
            c.status_id AS status_id, s.name AS status_name

        FROM `user_roles` er
          LEFT JOIN elists e ON e.id=er.entities_id
          LEFT JOIN `clists` c ON c.id=e.checklists_id
          LEFT JOIN `status` s ON s.id = c.overall_status_id

        WHERE s.slug = 'completed'
          AND c.deleted_at IS NULL
      )
    ");
  }

  /**
  * Reverse the migrations.
  *
  * @return void
  */
  public function down()
  {
    DB::statement('DROP VIEW IF EXISTS views_overall_report');
  }  

}

ステップ3. Laravelクエリを介してSQLビューを呼び出して実行する

$items = $DB::table('views_overall_report')
            ->select('status_id', 'status_name',
                $DB::raw('count(entities_id) as counts')
            )
            ->groupBy('status_id')
            ->orderBy('counts' , 'desc')
            ->whereIn('user_id', Auth::user()->id())
            ->get();
print_r($items);

お役に立てれば幸いです。もっと良い解決策があれば教えてください!!

ベストアンサー1

同じ問題に遭遇し、解決策を見つけました@http://programmingarehard.com/2013/11/10/eloquent_and_views.html/

CreateCompaniesViewクラスはMigrationを拡張します
{
    /**
     * 移行を実行します。
     *
     * @戻り値:void
     */
    パブリック関数 up()
    {
        DB::statement("CREATE VIEW companiesView AS
                        選択する *、
                            SELECT GROUP_CONCAT(DISTINCT id SEPARATOR ',')
                            人々からAS p
                            ここで、p.company_id = c.id
                        ) 個人IDとして
                        企業からのメッセージ: c");
    }

    /**
     * 移行を元に戻します。
     *
     * @戻り値:void
     */
    パブリック関数 down()
    {
        DB::statement("DROP VIEW companiesView");
    }
}

おすすめ記事