Ö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. Aufrufen und Ausführen der SQL-Ansichten über die Laravel-Abfrage
@FrancescodeGuytenaere, wie das Verknüpfen der Dokumentation hilfreich ist.
– Nullschreiber
6. Februar 2017 um 17:37 Uhr
@nullwriter Schauen Sie sich den Verlauf für diesen Beitrag an, anfangs konnte er die Dokumentation nicht finden, daher habe ich sie in einem Kommentar gepostet (anstatt sie als tatsächliche Antwort zu posten). Sie können meinen Kommentar als veraltet markieren.
– Francesco de Guytenaere
6. Februar 2017 um 18:27 Uhr
Ich habe das schon einmal gemacht. Sie können das normale Eloquent-Modell mithilfe der Ansicht tatsächlich gerade machen. php artisan make:model ViewOverallReport. Dann können Sie einfach $v = ViewOverallReport::all() als Beispiel verwenden, um es im Controller zu verwenden
– Apit John Ismail
13. Oktober 2017 um 11:35 Uhr
Sobald die Ansicht erstellt wurde, erhielt ich beim Ausführen einen Fehler php artisan migrate. Das Ändern der SQL-Anweisung in CREATE OR REPLACE VIEW hat das Problem behoben.
class CreateCompaniesView extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
DB::statement("CREATE VIEW companiesView AS
SELECT *,
(
SELECT GROUP_CONCAT(DISTINCT id SEPARATOR ',')
FROM people AS p
WHERE p.company_id = c.id
) AS person_ids
FROM companies AS c");
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
DB::statement("DROP VIEW companiesView");
}
}
Márcio Carvalho
Du kannst das:
public function up()
{
DB::statement($this->dropView());
DB::statement($this->createView());
}
private function dropView(): string
{
return <<<SQL
DROP VIEW IF EXISTS `meter_reading_reports`;
SQL;
}
private function createView(): string
{
return <<<SQL
CREATE VIEW `meter_reading_reports` AS
SELECT /* … The query */
SQL;
}
Jetzt, da wir eine Migration durchgeführt haben, funktioniert alles andere wie normales Laravel!
class MeterReadingReport extends Model
{
protected $casts = [
'day' => 'date',
];
public function unit(): BelongsTo
{
return $this->belongsTo(Unit::class);
}
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
}
Sie können eine Query Builder-Instanz 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');
}
}
Schreiben Sie Ihre Migration so, mit ‘CREATE OR REPLACE’ in der Up-Funktion:
public function up()
{
DB::statement('CREATE OR REPLACE VIEW my_view AS SELECT name FROM users');
}
public function down()
{
DB::statement('DROP VIEW my_view');
}
Julian Martinez
Sie können dies auch versuchen DB::connection()->getPdo()->exec(“your sql query”); 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 ...");
}
}
12459600cookie-checkWie erstelle ich die Migrationen für Datenbankansichten mit PHP Artisan in Laravel?yes
laravel.com/docs/master/migrations
– Francesco de Guytenaere
29. März 2016 um 14:45 Uhr
@FrancescodeGuytenaere, wie das Verknüpfen der Dokumentation hilfreich ist.
– Nullschreiber
6. Februar 2017 um 17:37 Uhr
@nullwriter Schauen Sie sich den Verlauf für diesen Beitrag an, anfangs konnte er die Dokumentation nicht finden, daher habe ich sie in einem Kommentar gepostet (anstatt sie als tatsächliche Antwort zu posten). Sie können meinen Kommentar als veraltet markieren.
– Francesco de Guytenaere
6. Februar 2017 um 18:27 Uhr
Ich habe das schon einmal gemacht. Sie können das normale Eloquent-Modell mithilfe der Ansicht tatsächlich gerade machen. php artisan make:model ViewOverallReport. Dann können Sie einfach $v = ViewOverallReport::all() als Beispiel verwenden, um es im Controller zu verwenden
– Apit John Ismail
13. Oktober 2017 um 11:35 Uhr
Sobald die Ansicht erstellt wurde, erhielt ich beim Ausführen einen Fehler
php artisan migrate
. Das Ändern der SQL-Anweisung in CREATE OR REPLACE VIEW hat das Problem behoben.– Kevin Marsden
8. Januar 2021 um 6:58 Uhr