Как программно построить запросы Eloquent на основе пользовательской структуры данных, сохраненной в постоянном хранилище? - PullRequest
0 голосов
/ 24 августа 2018

Я создаю инструмент отчетности для моего приложения Laravel, который позволит пользователям создавать отчеты и сохранять их для последующего использования.

Пользователи смогут выбирать из предварительно определенного списка для изменения запроса, затем запустите отчет и сохраните его.

Никогда раньше этого не делал, мне просто было интересно, можно ли сохранить запрос в базе данных?Это позволит пользователю выбрать сохраненный отчет и выполнить запрос.

Ответы [ 3 ]

0 голосов
/ 24 августа 2018

Вам необходимо создать конвертер между вашим механизмом хранения и моделью данных в PHP. Пример кода не принесет особой пользы, потому что вам нужно создать его исходя из своих потребностей.

Вам необходимо построить структуру данных (в данном случае, в идеале, с использованием JSON, поскольку она достаточно мощна), которая определяет все элементы запроса таким образом, чтобы ваша бизнес-логика могла читать и преобразовывать в запросы Eloquent.

В прошлом я делал нечто подобное, но для некоторых простых сценариев, таких как определение переменных для запросов вместо реальных элементов запроса.

Вот как я это сделаю, например:

{
    table: 'users',
    type: 'SELECT',
    fields: ['firstname AS fName', 'lastname AS lName'],
    wheres: [
        is_admin: false,
        is_registered: true
    ]
}

преобразуется в:

DB::table('users')
    ->where('is_admin', false)
    ->where('is_registered', true)
    ->get(['firstname AS fName', 'lastname AS lName']);

, который преобразуется в:

SELECT firstname AS fName, lastname AS lName WHERE is_admin = false AND is_registered = true
0 голосов
/ 24 августа 2018

Вот ответ о сохранении параметров отчета в дБ, но с точки зрения службы отчетов SQL Server (SSRS).

Но это все еще достаточно универсальная структура EAV для работы с любым типом данных параметра (строки, целые числа, даты и т. Д.).

Возможно, вы захотите пропустить Eloquent и использовать хранимые процедуры mysql. Тогда вам нужно только сохранить список параметров, которые вы передадите каждому.

Как и предпочитаемый тип вывода (например, .pdf, .xlsx, .html), кому отправлять его по электронной почте и у кого есть разрешение на его запуск.

0 голосов
/ 24 августа 2018

Одним из подходов, который был бы проще / надежнее, чем предлагаемый способ сохранения запросов в базе данных, было бы создание контроллера, который строит запросы на основе пользовательского ввода.

Вы можете проверить на стороне сервера, что параметры запроса соответствуют предварительно заданному списку параметров, а затем использовать QueryBuilder от Eloquent для программной сборки запросов.

Фактические примеры кода трудно предоставить на основе вашего вопроса, однако, поскольку они очень обширны и не содержат каких-либо конкретных примеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...