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