Рубрики
Software

Представление в базе данных для Laravel

Представления в базе данных — удобный и функциональный инструмент. На одном из проектов появилась необходимость создать представление, которое содержит в себе данные из трех таблиц. В Eloquent ORM и Query Builder не нашел примера для создания VIEW в базе данных.

Лучшим вариантом, как по мне, оказалось создание миграции с запросом в базу. Вот так выглядит function up()

public function up()
    {
        DB::statement(
            "CREATE VIEW flat_productlist AS
                SELECT 
                    p.id, 
                    p.sku, 
                    p.cat_id,
                    (select name from atributeset where id = atr.atributeset_id) as atribute_set,
                    images.path as main_photo
                FROM products p
                    LEFT JOIN product_atributeset atr ON p.id = atr.product_id 
                    LEFT JOIN images ON (p.id = images.product_id AND images.main = '1')
                ORDER BY p.id"
        );
    }

Для отката изменений прописываю еще один запрос:

    public function down()
    {
        DB::statement("DROP VIEW flat_productlist");
    }

Уверен, что есть более удобное решение. Если знаете — поделитесь.