Мы запустили наше веб-приложение в 2012 году, когда Perl был еще популярен.Теперь мы хотим переопределить его в PHP, предпочтительно в Laravel.Однако я упускаю возможности DBIx :: Class в их стандартном ORM, Eloquent, и альтернативе, Doctrine, в чтении документов, кажется более сложным, но также не решает проблему.Для чего я использую DBIx :: Class:
- Регенерация классов моделей из чтения структуры БД с сохранением любого кода, который был добавлен к ним (должен иметь).
- Создание сложных запросов(включая вложенные объединения, подзапросы) из конструкций на чистом языке, SQL не требуется (должен иметь).
Пример кода:
rows => $rows,
page => $page,
'select' => [
'entity_id',
{ group_concat => [ { distinct => 'pictures.id' } ], -as => 'photos' },
{ '' => [ 'entity.name' ], -as => 'entity_name' },
{ '' => [ 'municipality.name' ], -as => 'municipality_name' },
{ '' => [ 'me.birth_date' ], -as => 'bd' },
{ concat => [ { date_format => [ 'me.birth_date', \$c->config->{dateFormat} ] }, \"' ('", { timestampdiff => [ \'YEAR', 'me.birth_date', \'CURDATE()' ] }, \"')'" ], -as
{ date_format => [ 'me.birth_date', \$c->config->{dateFormat} ], -as => 'bd1' },
{ timestampdiff => [ \'YEAR', 'me.birth_date', \'CURDATE()' ], -as => 'bd2' },
{ '' => [ 'entity_state_type.name' ], -as => 'entity_state_name' },
{ '' => [ 'data_list_item.name' ], -as => 'entity_state_reason_name' },
{ '' => [ 'entity_state.note_text' ], -as => 'entity_state_note' },
{ '' => [ { if => [ 'entity.archived', \"'Yes'", \"''" ] } ], -as => 'entity_archived' },
],
join => {
entity => [ 'municipality', 'pictures', { 'entity_state' => [ 'entity_state_type', 'data_list_item' ] } ],
},
group_by => [ 'entity.id' ],
- Подкласс результата (строка) и классы набора результатов для прозрачного добавления пользовательских условий ограничения на основе ролей в код приложения (должен иметь или эквивалентен).
Вызов и результирующий запрос:
$c->model('DB::Person')->all
SELECT * FROM person WHERE owner = <user_id>
- ... если параметры безопасности роли пользователя указывают, что пользователь должен иметь доступ только к своим личностям.
- Параметры безопасности считываются из БД при запуске запроса и указывают, какие условия безопасности (отдельные классы) к которым должны применятьсятаблица.
- Это убирает всю безопасность из кода приложения, где ошибки чаще всего допускаются.
Какая библиотека PHP позволит нам реализовать это?