Commit 9f601636 authored by Jens Segers's avatar Jens Segers

Add unique parameter for push, fixes #91

parent 379fcba8
......@@ -422,6 +422,10 @@ Add an items to an array.
DB::collection('users')->where('name', 'John')->push('items', 'boots');
DB::collection('users')->where('name', 'John')->push('messages', array('from' => 'Jane Doe', 'message' => 'Hi John'));
If you don't want duplicate items, set the third parameter to `true`:
DB::collection('users')->where('name', 'John')->push('items', 'boots', true);
**Pull**
Remove an item from an array.
......
......@@ -522,15 +522,18 @@ class Builder extends \Illuminate\Database\Query\Builder {
* @param mixed $value
* @return int
*/
public function push($column, $value = null)
public function push($column, $value = null, $unique = false)
{
// Use the addToSet operator in case we only want unique items.
$operator = $unique ? '$addToSet' : '$push';
if (is_array($column))
{
$query = array('$push' => $column);
$query = array($operator => $column);
}
else
{
$query = array('$push' => array($column => $value));
$query = array($operator => array($column => $value));
}
return $this->performUpdate($query);
......
......@@ -217,15 +217,22 @@ class QueryBuilderTest extends PHPUnit_Framework_TestCase {
$this->assertEquals('tag1', $user['tags'][0]);
DB::collection('users')->where('_id', $id)->push('tags', 'tag2');
$user = DB::collection('users')->find($id);
$this->assertTrue(is_array($user['tags']));
$this->assertEquals(2, count($user['tags']));
$this->assertEquals('tag2', $user['tags'][1]);
// Add duplicate
DB::collection('users')->where('_id', $id)->push('tags', 'tag2');
$user = DB::collection('users')->find($id);
$this->assertEquals(3, count($user['tags']));
// Add unique
DB::collection('users')->where('_id', $id)->push('tags', 'tag1', true);
$user = DB::collection('users')->find($id);
$this->assertEquals(3, count($user['tags']));
$message = array('from' => 'Jane', 'body' => 'Hi John');
DB::collection('users')->where('_id', $id)->push('messages', $message);
$user = DB::collection('users')->find($id);
$this->assertTrue(is_array($user['messages']));
$this->assertEquals($message, $user['messages'][0]);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment