webentwicklung-frage-antwort-db.com.de

Wie erstellt man Migrationen für Datenbankansichten mit PHP-Handwerker in Laravel?

Tatsächlich ist es mir gelungen, eine SQL-Ansicht für Laravel mit PHP zu erstellen. Artisan verwendet den folgenden Schritt.

Schritt 1. Führen Sie den folgenden Befehl aus:

php artisan make:migration create_overall_report_views

Schritt 2.

Öffnen Sie die Migrationsdatei und fügen Sie den folgenden Code hinzu:

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');
  }  

}

Schritt 3. Zum Aufrufen und Ausführen der SQL-Ansichten über die Abfrage Laravel

$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);

Hoffentlich hilft das. Bitte lassen Sie mich wissen, wenn jemand eine bessere Lösung hat !!

12
rcadhikari

Stolperte über dasselbe Problem und fand die Lösung @ http://programmingarehard.com/2013/11/10/eloquent_and_views.html/

die Klasse CreateCompaniesView erweitert die Migration 
 {
 /**
 * Führen Sie die Migrationen aus .
 * 
 * @return void 
 */
 öffentliche Funktion nach oben () 
 {
 DB :: Anweisung ("CREATE VIEW companies") AS 
 SELECT *, 
 (
 SELECT GROUP_CONCAT (DISTINCT-ID SEPARATOR ',') 
 FROM Personen AS p 
 WHERE p.company_id = c. id 
) AS person_ids 
 FROM Unternehmen AS c "); 
 } 

 /**
 * Kehren Sie die Migrationen um .
 * 
 * @return void 
 */
 öffentliche Funktion nach unten () 
 {
 DB :: Anweisung ("DROP VIEW companiesView"); 
 } 
}
13
Peon

Ich habe ein Paket zum Erstellen, Umbenennen und Löschen von Ansichten erstellt:
https://github.com/staudenmeir/laravel-migration-views

Sie können eine Abfrageerstellungsinstanz oder eine SQL-Zeichenfolge bereitstellen:

use Staudenmeir\LaravelMigrationViews\Facades\Schema;

class CreateOverallReportView extends Migration 
{
    public function up()
    {
        $query = DB::table('user_roles as er')->[...];
        $query = 'SELECT [...] FROM `user_roles` er [...]';

        Schema::createView('views_overall_report', $query);
    }

    public function down()
    {
        Schema::dropView('views_overall_report');
    }  
}
0

Sie können auch diese DB :: connection () -> getPdo () -> exec ("Ihre SQL-Abfrage") versuchen; Es klappt

class CreateCompaniesView extends Migration 
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            DB::connection()->getPdo()->exec("CREATE VIEW companie ...");
        }

        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            DB::connection()->getPdo()->exec("DROP VIEW companies ...");
        }
    }
0
julian martinez