blainesch / li3_fake_model
Lithium PHP替代(快速)模型实现
0.2.2
2015-01-07 15:16 UTC
Requires
- php: >=5.3
- composer/installers: *
This package is not auto-updated.
Last update: 2024-09-24 05:28:41 UTC
README
当您不需要真实模型时
此库适用于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') ));
上面的查询将
- 查询并获取所有帖子
- 发出第二个查询以获取所有评论
- 将子评论连接到适当的父帖子
关系也可以提供深层查询逻辑
$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
文件。