2014-07-03 8 views

risposta

24

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.