julien-c/mongovel

PHP Mongo驱动程序的Laravel风格包装器

1.1 2014-12-04 10:34 UTC

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包装器

在编写我们自己的之前,这里是我们检查过的包装器(有时我们还为此做出了贡献)