Sto cercando di creare una vista in MySQL in Laravel tramite lo script di migrazione. Come possiamo creare una vista MySQL tramite lo script di migrazione in Laravel 4?Creare la vista MySQL tramite lo script di migrazione in Laravel 4
risposta
Che ne dici di questo? Non l'ho provato, ma penso che dovrebbe funzionare.
class CreateMyView extends Migration {
public function up()
{
DB::statement('CREATE VIEW myview AS SELECT [your select statement here]');
}
public function down()
{
DB::statement('DROP VIEW myview');
}
}
E quindi è possibile creare un modello per accedervi:
class MyView extends Eloquent {
protected $table = 'myview';
}
E poi per accedere alla vista da altrove nella vostra applicazione è possibile interrogare come si farebbe con qualsiasi altro modello, per esempio
MyView::all(); // returns all rows from your view
MyView::where('price', '>', '100.00')->get(); // gets rows from your view matching criteria
Props andare al seguente che ha fornito informazioni su come fare questo:
http://laravel.io/forum/05-29-2014-model-with-calculated-sql-field-doesnt-paginate http://forumsarchive.laravel.io/viewtopic.php?pid=51692#p51692
CAVEAT
attenzione se migrazioni successive modificano le tabelle sottostanti la visualizzazione . La ragione è che per the documentation:
La vista definizione è “congelato” al momento della creazione, in modo da modifiche alle tabelle sottostanti in seguito non influiscono sulla definizione della vista. Ad esempio, se una vista è definita come SELECT * su una tabella, le nuove colonne aggiunte alla tabella in seguito non diventano parte della vista.
Davvero, suppongo che dovresti fare attenzione a cose del genere per qualsiasi migrazione, quindi forse questo non è un grosso problema.