julien-c / mongovel
PHP Mongo驱动程序的Laravel风格包装器
Requires
- php: >=5.3.0
- illuminate/container: ~4
- illuminate/support: ~4
Requires (Dev)
- mockery/mockery: dev-master
This package is not auto-updated.
Last update: 2024-09-14 13:50:43 UTC
README
PHP Mongo驱动程序的Laravel风格包装器
大多数MongoDB包装器为Laravel要求抽象化PHP驱动程序并实现类似SQL的完整查询构建器。我们认为Mongo的PHP驱动程序本身非常出色,Mongo开箱即用的表达能力正是使其变得如此出色的原因。
本着这种精神,Mongovel是对PHP驱动程序的薄层包装,使其更像Eloquent
- 你可以像访问对象一样访问模型,而不是数组
- 你将获得Laravel集合作为查询结果
- 还有一些语法糖,例如受Facade启发的静态快捷方式,使整个体验更加优雅。记住,你始终保留Mongo方法的全功能,因为Mongovel始终代理调用底层的MongoCollections和MongoCursors。我们相信你会喜欢它的!
使用概述
说够了,下面是如何使用Mongovel
class Book extends MongovelModel { }
GET books/512ce86b98dee4a87a000000
:
public function show($id) { $book = Book::findOne(new MongoId($id)); // Here, you can access the book's attributes like in Eloquent: // $book->title, $book->reviews, etc. // $book->id is a string representation of the object's MongoId. // Let's say we're an API, so let's just send the object as JSON: return $book; }
Mongovel检测到$id
是MongoId,并返回一个将被自动序列化并发送为JSON的对象,由Laravel处理。
POST books
:
public function store() { $book = Input::only('title', 'content'); Book::insert($book); }
如果我们想更新书籍上的某些字段怎么办?比如说我们正在发表评论
POST books/512ce86b98dee4a87a000000/reviews
:
public function reviewStore($id) { $review = Input::all(); // You can leverage the full power of Mongo query operators: Book::update(new MongoId($id), array('$push' => array('reviews' => $reviews)) ); return Response::json(array('status' => 201), 201); }
删除一本书就像这样简单
public function destroy($id) { Book::remove(new MongoId($id)); }
最后,Mongovel将MongoCursor结果包装成Laravel集合,所以你可以这样操作: GET books
public function index() { $books = Book::find(); $books->each(function($book) { // Do anything you would do on a Laravel Collection }); return $books; }
批量操作
为了使批量操作不那么痛苦,Mongovel实现了标准批量接口
$bulk = Book::initializeOrderedBulk(); $bulk->insert(array('author' => 'Me', 'title' => 'My life')); $bulk->find(array('author' => 'Me')) ->update(array('$push' => array('reviews' => "Awesome!"))); $bulk->find(array('title' => 'My life')) ->updateOne(array('$push' => array('reviews' => "Incredible!"))); $bulk->find(array('title' => 'My life, II')) ->upsert() ->update(array('$push' => array('reviews' => "Can't wait!"))); $bulk->find(array('author' => 'Not me')) ->remove(); $bulk->find(array('title' => 'My life, II')) ->removeOne(); $bulk->execute();
安装方法
将julien-c/mongovel
添加到composer.json的要求中,然后运行composer update
。
在app/config/app.php
中将Mongovel的服务提供者添加到您的Laravel应用程序中。在providers
数组中添加
'Mongovel\MongovelServiceProvider'
然后在同一文件中的aliases
数组中添加Mongovel的模型类别名
'MongovelModel' => 'Mongovel\Model'
最后,在app/config/database.php
的末尾添加MongoDB散列(因此,在connections
之外)
'mongodb' => array( 'default' => array( 'host' => 'localhost', 'port' => 27017, 'database' => 'laravel', ) )
如有必要(对于MongoHq等),您还可以在此数组中指定用户名和密码。
任何其他选项都将作为GET参数添加到DSN中。
认证
要使用Mongovel作为认证提供程序,您只需在app/config/auth.php
文件中将mongo
设置为驱动程序。
许可证
在MIT许可证下许可。
PHP中的其他MongoDB包装器
在编写我们自己的之前,这里是我们检查过的包装器(有时我们还为此做出了贡献)