blainesch/li3_fake_model

Lithium PHP替代(快速)模型实现

安装: 16,518

依赖项: 0

建议者: 0

安全: 0

星标: 6

关注者: 3

分支: 1

类型:lithium-library

0.2.2 2015-01-07 15:16 UTC

This package is not auto-updated.

Last update: 2024-09-24 05:28:41 UTC


README

当您不需要真实模型时

Build Status

此库适用于PHP Lithium Web框架,并提供对内置数据模型的替代方案。

它做不了多少事情,但这正是重点。以下是一个比较

[1] 类似。我们包装了原生的LI3数据源,以避免Document/DocumentSet的疯狂。

[2] 我只测试了MongoDB,但如果有人愿意努力,Fake Models可以调整以与SQL数据源一起工作。

那么我为什么要使用这个呢?

您可能不应该。我的意思是,Fake Models基本上什么都不做!没有人会做出这种切换。

好吧,坦白说,Lithium Models很臃肿,而且速度慢。它们存储了大量冗余数据,而且所有的可过滤方法(我怀疑)都导致了它们的缓慢。

以下是一些基准测试...

每个测试都是100次迭代(除以100以获取真实时间)。

关系

Lithium模型支持数据源层的关系,这对于关系型数据库来说效果很好,但对于MongoDB来说就不太好了。

Fake模型在模型级别支持关系,并通过发出额外的查询来有效地预加载相关记录。以下是您如何使用它的方法

1. 定义您的模型关系。

class Posts extends Model {

  public $hasMany = array(
    'Comments' => array(
      'to'        => 'Comments',  // The model
      'key'       => array('_id' => 'comment_id'), // or, you can use an array of foreign keys, e.g. array('comment_ids' => '_id')
      'fieldName' => 'comments',  // The key it's on
      // `order`, `limit`, `conditions` can also be used
    ),
  );

}

2. 查询您的模型,并告诉它要获取哪些关系。

$posts = Posts::all(array(
  'with' => array('Comments')
));

上面的查询将

  1. 查询并获取所有帖子
  2. 发出第二个查询以获取所有评论
  3. 将子评论连接到适当的父帖子

关系也可以提供深层查询逻辑

$posts = Posts::all(array(
  'with' => array(
    'comments' => array(
      'order' => array('date' => 'asc'),
      'limit' => 10,
      'conditions' => array(
        'flagged' => false,
      ),
    ),
));

关系也可以进一步嵌套,例如

$posts = Posts::all(array(
  'with' => array(
    'Comments' => array('Author')
  )
));

这个方法调用仍然只向Mongo数据库发出3个总查询,耶!

版权和许可证

Fake模型采用MIT许可证 - 有关详细信息,请参阅LICENSE文件。