PHP中等效的DBIx :: Class(Perl ORM)

时间:2019-02-08 20:01:55

标签: php laravel perl eloquent dbix-class

我们在2012年开始流行基于Web的应用程序,当时Perl仍然很流行。现在,我们想用PHP(最好是Laravel)重新实现它。但是,我错过了默认ORM Eloquent和替代方法Doctrine中DBIx :: Class的功能,因为阅读文档似乎更加复杂,但也不能解决问题。我使用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库将允许我们实现这一目标?

0 个答案:

没有答案