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
7445ea6c
Unverified
Commit
7445ea6c
authored
Mar 01, 2018
by
Jens Segers
Committed by
GitHub
Mar 01, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1423 from milanspv/fix/delete-nested-embeds
[Fix] Unable to delete nested embedded models
parents
17b6864f
cada2cd7
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
70 additions
and
6 deletions
+70
-6
EmbedsMany.php
src/Jenssegers/Mongodb/Relations/EmbedsMany.php
+1
-3
EmbedsOne.php
src/Jenssegers/Mongodb/Relations/EmbedsOne.php
+1
-3
EmbedsOneOrMany.php
src/Jenssegers/Mongodb/Relations/EmbedsOneOrMany.php
+18
-0
EmbeddedRelationsTest.php
tests/EmbeddedRelationsTest.php
+50
-0
No files found.
src/Jenssegers/Mongodb/Relations/EmbedsMany.php
View file @
7445ea6c
...
@@ -6,7 +6,6 @@ use Illuminate\Database\Eloquent\Collection;
...
@@ -6,7 +6,6 @@ use Illuminate\Database\Eloquent\Collection;
use
Illuminate\Database\Eloquent\Model
;
use
Illuminate\Database\Eloquent\Model
;
use
Illuminate\Pagination\LengthAwarePaginator
;
use
Illuminate\Pagination\LengthAwarePaginator
;
use
Illuminate\Pagination\Paginator
;
use
Illuminate\Pagination\Paginator
;
use
Illuminate\Support\Arr
;
use
MongoDB\BSON\ObjectID
;
use
MongoDB\BSON\ObjectID
;
class
EmbedsMany
extends
EmbedsOneOrMany
class
EmbedsMany
extends
EmbedsOneOrMany
...
@@ -79,8 +78,7 @@ class EmbedsMany extends EmbedsOneOrMany
...
@@ -79,8 +78,7 @@ class EmbedsMany extends EmbedsOneOrMany
// Get the correct foreign key value.
// Get the correct foreign key value.
$foreignKey
=
$this
->
getForeignKeyValue
(
$model
);
$foreignKey
=
$this
->
getForeignKeyValue
(
$model
);
// Use array dot notation for better update behavior.
$values
=
$this
->
getUpdateValues
(
$model
->
getDirty
(),
$this
->
localKey
.
'.$.'
);
$values
=
Arr
::
dot
(
$model
->
getDirty
(),
$this
->
localKey
.
'.$.'
);
// Update document in database.
// Update document in database.
$result
=
$this
->
getBaseQuery
()
->
where
(
$this
->
localKey
.
'.'
.
$model
->
getKeyName
(),
$foreignKey
)
$result
=
$this
->
getBaseQuery
()
->
where
(
$this
->
localKey
.
'.'
.
$model
->
getKeyName
(),
$foreignKey
)
...
...
src/Jenssegers/Mongodb/Relations/EmbedsOne.php
View file @
7445ea6c
...
@@ -3,7 +3,6 @@
...
@@ -3,7 +3,6 @@
namespace
Jenssegers\Mongodb\Relations
;
namespace
Jenssegers\Mongodb\Relations
;
use
Illuminate\Database\Eloquent\Model
;
use
Illuminate\Database\Eloquent\Model
;
use
Illuminate\Support\Arr
;
use
MongoDB\BSON\ObjectID
;
use
MongoDB\BSON\ObjectID
;
class
EmbedsOne
extends
EmbedsOneOrMany
class
EmbedsOne
extends
EmbedsOneOrMany
...
@@ -71,8 +70,7 @@ class EmbedsOne extends EmbedsOneOrMany
...
@@ -71,8 +70,7 @@ class EmbedsOne extends EmbedsOneOrMany
return
$this
->
parent
->
save
();
return
$this
->
parent
->
save
();
}
}
// Use array dot notation for better update behavior.
$values
=
$this
->
getUpdateValues
(
$model
->
getDirty
(),
$this
->
localKey
.
'.'
);
$values
=
Arr
::
dot
(
$model
->
getDirty
(),
$this
->
localKey
.
'.'
);
$result
=
$this
->
getBaseQuery
()
->
update
(
$values
);
$result
=
$this
->
getBaseQuery
()
->
update
(
$values
);
...
...
src/Jenssegers/Mongodb/Relations/EmbedsOneOrMany.php
View file @
7445ea6c
...
@@ -375,4 +375,22 @@ abstract class EmbedsOneOrMany extends Relation
...
@@ -375,4 +375,22 @@ abstract class EmbedsOneOrMany extends Relation
{
{
return
$this
->
parent
->
getKey
();
return
$this
->
parent
->
getKey
();
}
}
/**
* Return update values
*
* @param $array
* @param string $prepend
* @return array
*/
public
static
function
getUpdateValues
(
$array
,
$prepend
=
''
)
{
$results
=
[];
foreach
(
$array
as
$key
=>
$value
)
{
$results
[
$prepend
.
$key
]
=
$value
;
}
return
$results
;
}
}
}
tests/EmbeddedRelationsTest.php
View file @
7445ea6c
...
@@ -653,6 +653,56 @@ class EmbeddedRelationsTest extends TestCase
...
@@ -653,6 +653,56 @@ class EmbeddedRelationsTest extends TestCase
$this
->
assertEquals
(
'Steve Doe'
,
$user
->
father
->
name
);
$this
->
assertEquals
(
'Steve Doe'
,
$user
->
father
->
name
);
}
}
public
function
testNestedEmbedsOneDelete
()
{
$user
=
User
::
create
([
'name'
=>
'John Doe'
]);
$father
=
$user
->
father
()
->
create
([
'name'
=>
'Mark Doe'
]);
$grandfather
=
$father
->
father
()
->
create
([
'name'
=>
'Steve Doe'
]);
$greatgrandfather
=
$grandfather
->
father
()
->
create
([
'name'
=>
'Tom Doe'
]);
$grandfather
->
delete
();
$this
->
assertNull
(
$user
->
father
->
father
);
$user
=
User
::
where
([
'name'
=>
'John Doe'
])
->
first
();
$this
->
assertNull
(
$user
->
father
->
father
);
}
public
function
testNestedEmbedsManyDelete
()
{
$user
=
User
::
create
([
'name'
=>
'John Doe'
]);
$country
=
$user
->
addresses
()
->
create
([
'country'
=>
'France'
]);
$city1
=
$country
->
addresses
()
->
create
([
'city'
=>
'Paris'
]);
$city2
=
$country
->
addresses
()
->
create
([
'city'
=>
'Nice'
]);
$city3
=
$country
->
addresses
()
->
create
([
'city'
=>
'Lyon'
]);
$city2
->
delete
();
$this
->
assertEquals
(
2
,
$user
->
addresses
()
->
first
()
->
addresses
()
->
count
());
$this
->
assertEquals
(
'Lyon'
,
$country
->
addresses
()
->
last
()
->
city
);
$user
=
User
::
where
(
'name'
,
'John Doe'
)
->
first
();
$this
->
assertEquals
(
2
,
$user
->
addresses
()
->
first
()
->
addresses
()
->
count
());
$this
->
assertEquals
(
'Lyon'
,
$country
->
addresses
()
->
last
()
->
city
);
}
public
function
testNestedMixedEmbedsDelete
()
{
$user
=
User
::
create
([
'name'
=>
'John Doe'
]);
$father
=
$user
->
father
()
->
create
([
'name'
=>
'Mark Doe'
]);
$country1
=
$father
->
addresses
()
->
create
([
'country'
=>
'France'
]);
$country2
=
$father
->
addresses
()
->
create
([
'country'
=>
'Belgium'
]);
$country1
->
delete
();
$this
->
assertEquals
(
1
,
$user
->
father
->
addresses
()
->
count
());
$this
->
assertEquals
(
'Belgium'
,
$user
->
father
->
addresses
()
->
last
()
->
country
);
$user
=
User
::
where
(
'name'
,
'John Doe'
)
->
first
();
$this
->
assertEquals
(
1
,
$user
->
father
->
addresses
()
->
count
());
$this
->
assertEquals
(
'Belgium'
,
$user
->
father
->
addresses
()
->
last
()
->
country
);
}
public
function
testDoubleAssociate
()
public
function
testDoubleAssociate
()
{
{
$user
=
User
::
create
([
'name'
=>
'John Doe'
]);
$user
=
User
::
create
([
'name'
=>
'John Doe'
]);
...
...
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