An Eloquent model that supports MongoDB, inspired by LMongo but using original Eloquent methods.
This model extends the original Eloquent model so it uses exactly the same methods. Please note that some advanced Eloquent features may not be working, but feel free to issue a pull request!
Add the package to your composer.json
or install manually.
{
"require": {
"jenssegers/mongodb": "*"
}
}
Run composer update
to download and install the package.
Add the service provider in app/config/app.php
:
'Jenssegers\Mongodb\MongodbServiceProvider',
Tell your model to use the MongoDB model and a MongoDB collection (alias for table):
use Jenssegers\Mongodb\Model as Eloquent
class MyModel extends Eloquent {
protected $collection = 'mycollection';
}
The model will automatically check the database configuration array in app/config/database.php
for a 'mongodb' item.
'mongodb' => array(
'host' => 'localhost',
'port' => 27017,
'database' => 'database',
),
You can also specify the connection name in the model:
class MyModel extends Eloquent {
protected $connection = 'mongodb2';
}
Retrieving All Models
$users = User::all();
Retrieving A Record By Primary Key
$user = User::find('517c43667db388101e00000f');
Wheres
$users = User::where('votes', '>', 100)->take(10)->get();
Or Statements
$users = User::where('votes', '>', 100)->orWhere('name', 'John')->get();
Using Where In With An Array
$users = User::whereIn('age', array(16, 18, 20))->get();
Using Where Between
$users = User::whereBetween('votes', array(1, 100))->get();
Where null
$users = User::whereNull('updated_at')->get();
Order By
$users = User::orderBy('name', 'desc')->get();
Offset & Limit
$users = User::skip(10)->take(5)->get();
Distinct
Distinct requires a field for which to return the distinct values.
$users = User::distinct()->get(array('name'));
// or
$users = User::distinct('name')->get();
Distinct can be combined with where:
$users = User::where('active', true)->distinct('name')->get();
Advanced Wheres
$users = User::where('name', '=', 'John')->orWhere(function($query)
{
$query->where('votes', '>', 100)
->where('title', '<>', 'Admin');
})
->get();
Group By
Selected columns that are not grouped will be aggregated with the $last function.
$users = Users::groupBy('title')->get(array('title', 'name'));
Aggregation
$total = Order::count();
$price = Order::max('price');
$price = Order::min('price');
$price = Order::avg('price');
$total = Order::sum('price');
Aggregations can be combined with where:
$sold = Orders::where('sold', true)->sum('price');
Like
$user = Comment::where('body', 'like', '%spam%')->get();
Inserts, updates and deletes
All basic insert, update, delete and select methods should be implemented.