Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
L
laravel-mongodb
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
sinan
laravel-mongodb
Commits
9f601636
Commit
9f601636
authored
Dec 31, 2013
by
Jens Segers
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add unique parameter for push, fixes #91
parent
379fcba8
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
20 additions
and
6 deletions
+20
-6
README.md
README.md
+4
-0
Builder.php
src/Jenssegers/Mongodb/Query/Builder.php
+6
-3
QueryBuilderTest.php
tests/QueryBuilderTest.php
+10
-3
No files found.
README.md
View file @
9f601636
...
@@ -422,6 +422,10 @@ Add an items to an array.
...
@@ -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('items', 'boots');
DB::collection('users')->where('name', 'John')->push('messages', array('from' => 'Jane Doe', 'message' => 'Hi John'));
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**
**Pull**
Remove an item from an array.
Remove an item from an array.
...
...
src/Jenssegers/Mongodb/Query/Builder.php
View file @
9f601636
...
@@ -522,15 +522,18 @@ class Builder extends \Illuminate\Database\Query\Builder {
...
@@ -522,15 +522,18 @@ class Builder extends \Illuminate\Database\Query\Builder {
* @param mixed $value
* @param mixed $value
* @return int
* @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
))
if
(
is_array
(
$column
))
{
{
$query
=
array
(
'$push'
=>
$column
);
$query
=
array
(
$operator
=>
$column
);
}
}
else
else
{
{
$query
=
array
(
'$push'
=>
array
(
$column
=>
$value
));
$query
=
array
(
$operator
=>
array
(
$column
=>
$value
));
}
}
return
$this
->
performUpdate
(
$query
);
return
$this
->
performUpdate
(
$query
);
...
...
tests/QueryBuilderTest.php
View file @
9f601636
...
@@ -217,15 +217,22 @@ class QueryBuilderTest extends PHPUnit_Framework_TestCase {
...
@@ -217,15 +217,22 @@ class QueryBuilderTest extends PHPUnit_Framework_TestCase {
$this
->
assertEquals
(
'tag1'
,
$user
[
'tags'
][
0
]);
$this
->
assertEquals
(
'tag1'
,
$user
[
'tags'
][
0
]);
DB
::
collection
(
'users'
)
->
where
(
'_id'
,
$id
)
->
push
(
'tags'
,
'tag2'
);
DB
::
collection
(
'users'
)
->
where
(
'_id'
,
$id
)
->
push
(
'tags'
,
'tag2'
);
$user
=
DB
::
collection
(
'users'
)
->
find
(
$id
);
$user
=
DB
::
collection
(
'users'
)
->
find
(
$id
);
$this
->
assertTrue
(
is_array
(
$user
[
'tags'
]));
$this
->
assertEquals
(
2
,
count
(
$user
[
'tags'
]));
$this
->
assertEquals
(
2
,
count
(
$user
[
'tags'
]));
$this
->
assertEquals
(
'tag2'
,
$user
[
'tags'
][
1
]);
$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'
);
$message
=
array
(
'from'
=>
'Jane'
,
'body'
=>
'Hi John'
);
DB
::
collection
(
'users'
)
->
where
(
'_id'
,
$id
)
->
push
(
'messages'
,
$message
);
DB
::
collection
(
'users'
)
->
where
(
'_id'
,
$id
)
->
push
(
'messages'
,
$message
);
$user
=
DB
::
collection
(
'users'
)
->
find
(
$id
);
$user
=
DB
::
collection
(
'users'
)
->
find
(
$id
);
$this
->
assertTrue
(
is_array
(
$user
[
'messages'
]));
$this
->
assertTrue
(
is_array
(
$user
[
'messages'
]));
$this
->
assertEquals
(
$message
,
$user
[
'messages'
][
0
]);
$this
->
assertEquals
(
$message
,
$user
[
'messages'
][
0
]);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment