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
17b80284
Commit
17b80284
authored
Feb 03, 2016
by
Jens Segers
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixes for Laravel 5.2
parent
4cdb4fba
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
78 additions
and
315 deletions
+78
-315
Collection.php
src/Jenssegers/Mongodb/Eloquent/Collection.php
+0
-248
Model.php
src/Jenssegers/Mongodb/Model.php
+11
-0
Builder.php
src/Jenssegers/Mongodb/Query/Builder.php
+1
-0
Grammar.php
src/Jenssegers/Mongodb/Query/Grammar.php
+8
-0
EmbedsMany.php
src/Jenssegers/Mongodb/Relations/EmbedsMany.php
+2
-2
EmbedsOneOrMany.php
src/Jenssegers/Mongodb/Relations/EmbedsOneOrMany.php
+10
-8
HasMany.php
src/Jenssegers/Mongodb/Relations/HasMany.php
+17
-0
HasOne.php
src/Jenssegers/Mongodb/Relations/HasOne.php
+17
-0
AuthTest.php
tests/AuthTest.php
+6
-0
EmbeddedRelationsTest.php
tests/EmbeddedRelationsTest.php
+5
-57
TestCase.php
tests/TestCase.php
+1
-0
No files found.
src/Jenssegers/Mongodb/Eloquent/Collection.php
deleted
100644 → 0
View file @
4cdb4fba
<?php
namespace
Jenssegers\Mongodb\Eloquent
;
use
Illuminate\Database\Eloquent\Collection
as
EloquentCollection
;
class
Collection
extends
EloquentCollection
{
/**
* Simulate a get clause on the collection.
*
* @param mixed $key
* @param mixed $default
* @return mixed
*/
public
function
get
(
$key
=
null
,
$default
=
null
)
{
if
(
is_null
(
$key
)
and
is_null
(
$default
))
{
return
$this
;
}
return
parent
::
get
(
$key
,
$default
);
}
/**
* Simulate a basic where clause on the collection.
*
* @param string $key
* @param string $operator
* @param mixed $value
* @param string $boolean
* @return $this
*/
public
function
where
(
$key
,
$operator
=
null
,
$value
=
null
)
{
// Here we will make some assumptions about the operator. If only 2 values are
// passed to the method, we will assume that the operator is an equals sign
// and keep going.
if
(
func_num_args
()
==
2
)
{
list
(
$value
,
$operator
)
=
[
$operator
,
'='
];
}
return
$this
->
filter
(
function
(
$item
)
use
(
$key
,
$operator
,
$value
)
{
$actual
=
$item
->
{
$key
};
switch
(
$operator
)
{
case
'<>'
:
case
'!='
:
return
$actual
!=
$value
;
break
;
case
'>'
:
return
$actual
>
$value
;
break
;
case
'<'
:
return
$actual
<
$value
;
break
;
case
'>='
:
return
$actual
>=
$value
;
break
;
case
'<='
:
return
$actual
<=
$value
;
break
;
case
'between'
:
return
$actual
>=
$value
[
0
]
and
$actual
<=
$value
[
1
];
break
;
case
'not between'
:
return
$actual
<
$value
[
0
]
or
$actual
>
$value
[
1
];
break
;
case
'in'
:
return
in_array
(
$actual
,
$value
);
break
;
case
'not in'
:
return
!
in_array
(
$actual
,
$value
);
break
;
case
'='
:
default
:
return
$actual
==
$value
;
break
;
}
});
}
/**
* Add a where between statement to the query.
*
* @param string $column
* @param array $values
* @param string $boolean
* @param bool $not
* @return $this
*/
public
function
whereBetween
(
$column
,
array
$values
,
$boolean
=
'and'
,
$not
=
false
)
{
$type
=
$not
?
'not between'
:
'between'
;
return
$this
->
where
(
$column
,
$type
,
$values
);
}
/**
* Add a where not between statement to the query.
*
* @param string $column
* @param array $values
* @param string $boolean
* @return $this
*/
public
function
whereNotBetween
(
$column
,
array
$values
,
$boolean
=
'and'
)
{
return
$this
->
whereBetween
(
$column
,
$values
,
$boolean
,
true
);
}
/**
* Add a "where in" clause to the query.
*
* @param string $column
* @param mixed $values
* @param string $boolean
* @param bool $not
* @return $this
*/
public
function
whereIn
(
$column
,
$values
,
$boolean
=
'and'
,
$not
=
false
)
{
$type
=
$not
?
'not in'
:
'in'
;
return
$this
->
where
(
$column
,
$type
,
$values
);
}
/**
* Add a "where not in" clause to the query.
*
* @param string $column
* @param mixed $values
* @param string $boolean
* @return $this
*/
public
function
whereNotIn
(
$column
,
$values
,
$boolean
=
'and'
)
{
return
$this
->
whereIn
(
$column
,
$values
,
$boolean
,
true
);
}
/**
* Add a "where null" clause to the query.
*
* @param string $column
* @param string $boolean
* @param bool $not
* @return $this
*/
public
function
whereNull
(
$column
,
$boolean
=
'and'
,
$not
=
false
)
{
return
$this
->
where
(
$column
,
'='
,
null
);
}
/**
* Add a "where not null" clause to the query.
*
* @param string $column
* @param string $boolean
* @return $this
*/
public
function
whereNotNull
(
$column
,
$boolean
=
'and'
)
{
return
$this
->
where
(
$column
,
'!='
,
null
);
}
/**
* Simulate order by clause on the collection.
*
* @param string $key
* @param string $direction
* @return $this
*/
public
function
orderBy
(
$key
,
$direction
=
'asc'
)
{
$descending
=
strtolower
(
$direction
)
==
'desc'
;
return
$this
->
sortBy
(
$key
,
SORT_REGULAR
,
$descending
);
}
/**
* Add an "order by" clause for a timestamp to the query.
*
* @param string $column
* @return $this
*/
public
function
latest
(
$column
=
'created_at'
)
{
return
$this
->
orderBy
(
$column
,
'desc'
);
}
/**
* Add an "order by" clause for a timestamp to the query.
*
* @param string $column
* @return $this
*/
public
function
oldest
(
$column
=
'created_at'
)
{
return
$this
->
orderBy
(
$column
,
'asc'
);
}
/**
* Set the "offset" value of the query.
*
* @param int $value
* @return $this
*/
public
function
offset
(
$value
)
{
$offset
=
max
(
0
,
$value
);
return
$this
->
slice
(
$offset
);
}
/**
* Alias to set the "offset" value of the query.
*
* @param int $value
* @return $this
*/
public
function
skip
(
$value
)
{
return
$this
->
offset
(
$value
);
}
/**
* Set the "limit" value of the query.
*
* @param int $value
* @return $this
*/
public
function
limit
(
$value
)
{
return
$this
->
take
(
$value
);
}
}
src/Jenssegers/Mongodb/Model.php
View file @
17b80284
...
...
@@ -322,6 +322,16 @@ abstract class Model extends BaseModel {
parent
::
setAttribute
(
$key
,
$value
);
}
/**
* Get the casts array.
*
* @return array
*/
public
function
getCasts
()
{
return
$this
->
casts
;
}
/**
* Convert the model's attributes to an array.
*
...
...
@@ -372,6 +382,7 @@ abstract class Model extends BaseModel {
{
$current
=
$current
instanceof
MongoDate
?
$this
->
asDateTime
(
$current
)
:
$current
;
$original
=
$original
instanceof
MongoDate
?
$this
->
asDateTime
(
$original
)
:
$original
;
return
$current
==
$original
;
}
...
...
src/Jenssegers/Mongodb/Query/Builder.php
View file @
17b80284
...
...
@@ -85,6 +85,7 @@ class Builder extends BaseBuilder {
*/
public
function
__construct
(
Connection
$connection
,
Processor
$processor
)
{
$this
->
grammar
=
new
Grammar
;
$this
->
connection
=
$connection
;
$this
->
processor
=
$processor
;
}
...
...
src/Jenssegers/Mongodb/Query/Grammar.php
0 → 100644
View file @
17b80284
<?php
namespace
Jenssegers\Mongodb\Query
;
use
Illuminate\Database\Query\Grammars\Grammar
as
BaseGrammar
;
class
Grammar
extends
BaseGrammar
{
}
src/Jenssegers/Mongodb/Relations/EmbedsMany.php
View file @
17b80284
...
...
@@ -10,7 +10,7 @@ class EmbedsMany extends EmbedsOneOrMany {
/**
* Get the results of the relationship.
*
* @return \
Jenssegers\Mongodb
\Eloquent\Collection
* @return \
Illuminate\Database
\Eloquent\Collection
*/
public
function
getResults
()
{
...
...
@@ -321,7 +321,7 @@ class EmbedsMany extends EmbedsOneOrMany {
public
function
__call
(
$method
,
$parameters
)
{
// Collection methods
if
(
method_exists
(
'
Jenssegers\Mongodb
\Eloquent\Collection'
,
$method
))
if
(
method_exists
(
'
Illuminate\Database
\Eloquent\Collection'
,
$method
))
{
return
call_user_func_array
([
$this
->
getResults
(),
$method
],
$parameters
);
}
...
...
src/Jenssegers/Mongodb/Relations/EmbedsOneOrMany.php
View file @
17b80284
<?php
namespace
Jenssegers\Mongodb\Relations
;
use
Illuminate\Database\Eloquent\Builder
;
use
Illuminate\Database\Eloquent\Collection
as
BaseCollection
;
use
Illuminate\Database\Eloquent\Collection
;
use
Illuminate\Database\Eloquent\Model
;
use
Illuminate\Database\Eloquent\Relations\Relation
;
use
Jenssegers\Mongodb\Eloquent\Collection
;
abstract
class
EmbedsOneOrMany
extends
Relation
{
...
...
@@ -104,7 +103,7 @@ abstract class EmbedsOneOrMany extends Relation {
* @param string $relation
* @return array
*/
public
function
match
(
array
$models
,
Base
Collection
$results
,
$relation
)
public
function
match
(
array
$models
,
Collection
$results
,
$relation
)
{
foreach
(
$models
as
$model
)
{
...
...
@@ -121,7 +120,7 @@ abstract class EmbedsOneOrMany extends Relation {
/**
* Shorthand to get the results of the relationship.
*
* @return \
Jenssegers\Mongodb
\Eloquent\Collection
* @return \
Illuminate\Database
\Eloquent\Collection
*/
public
function
get
()
{
...
...
@@ -212,7 +211,7 @@ abstract class EmbedsOneOrMany extends Relation {
*/
protected
function
getIdsArrayFrom
(
$ids
)
{
if
(
$ids
instanceof
Collection
)
if
(
$ids
instanceof
\Illuminate\Support\
Collection
)
{
$ids
=
$ids
->
all
();
}
...
...
@@ -237,7 +236,9 @@ abstract class EmbedsOneOrMany extends Relation {
// Get raw attributes to skip relations and accessors.
$attributes
=
$this
->
parent
->
getAttributes
();
return
isset
(
$attributes
[
$this
->
localKey
])
?
$attributes
[
$this
->
localKey
]
:
null
;
$embedded
=
isset
(
$attributes
[
$this
->
localKey
])
?
(
array
)
$attributes
[
$this
->
localKey
]
:
[];
return
$embedded
;
}
/**
...
...
@@ -248,6 +249,7 @@ abstract class EmbedsOneOrMany extends Relation {
*/
protected
function
setEmbedded
(
$records
)
{
// Assign models to parent attributes array.
$attributes
=
$this
->
parent
->
getAttributes
();
$attributes
[
$this
->
localKey
]
=
$records
;
...
...
@@ -256,7 +258,7 @@ abstract class EmbedsOneOrMany extends Relation {
$this
->
parent
->
setRawAttributes
(
$attributes
);
// Set the relation on the parent.
return
$this
->
parent
->
setRelation
(
$this
->
relation
,
$this
->
getResults
());
return
$this
->
parent
->
setRelation
(
$this
->
relation
,
$
records
===
null
?
null
:
$
this
->
getResults
());
}
/**
...
...
@@ -280,7 +282,7 @@ abstract class EmbedsOneOrMany extends Relation {
* Convert an array of records to a Collection.
*
* @param array $records
* @return \
Jenssegers\Mongodb
\Eloquent\Collection
* @return \
Illuminate\Database
\Eloquent\Collection
*/
protected
function
toCollection
(
array
$records
=
[])
{
...
...
src/Jenssegers/Mongodb/Relations/HasMany.php
View file @
17b80284
...
...
@@ -5,6 +5,23 @@ use Illuminate\Database\Eloquent\Relations\HasMany as EloquentHasMany;
class
HasMany
extends
EloquentHasMany
{
/**
* Add the constraints for a relationship query.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param \Illuminate\Database\Eloquent\Builder $parent
* @param array|mixed $columns
* @return \Illuminate\Database\Eloquent\Builder
*/
public
function
getRelationQuery
(
Builder
$query
,
Builder
$parent
,
$columns
=
[
'*'
])
{
$query
->
select
(
$columns
);
$key
=
$this
->
wrap
(
$this
->
getQualifiedParentKeyName
());
return
$query
->
where
(
$this
->
getHasCompareKey
(),
'exists'
,
true
);
}
/**
* Add the constraints for a relationship count query.
*
...
...
src/Jenssegers/Mongodb/Relations/HasOne.php
View file @
17b80284
...
...
@@ -5,6 +5,23 @@ use Illuminate\Database\Eloquent\Relations\HasOne as EloquentHasOne;
class
HasOne
extends
EloquentHasOne
{
/**
* Add the constraints for a relationship query.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param \Illuminate\Database\Eloquent\Builder $parent
* @param array|mixed $columns
* @return \Illuminate\Database\Eloquent\Builder
*/
public
function
getRelationQuery
(
Builder
$query
,
Builder
$parent
,
$columns
=
[
'*'
])
{
$query
->
select
(
$columns
);
$key
=
$this
->
wrap
(
$this
->
getQualifiedParentKeyName
());
return
$query
->
where
(
$this
->
getHasCompareKey
(),
'exists'
,
true
);
}
/**
* Add the constraints for a relationship count query.
*
...
...
tests/AuthTest.php
View file @
17b80284
<?php
use
Illuminate\Auth\Passwords\PasswordBroker
;
use
Illuminate\Foundation\Application
;
class
AuthTest
extends
TestCase
{
...
...
@@ -24,6 +25,11 @@ class AuthTest extends TestCase {
public
function
testRemind
()
{
if
(
Application
::
VERSION
>=
'5.2'
)
{
return
;
}
$mailer
=
Mockery
::
mock
(
'Illuminate\Mail\Mailer'
);
$tokens
=
$this
->
app
->
make
(
'auth.password.tokens'
);
$users
=
$this
->
app
[
'auth'
]
->
driver
()
->
getProvider
();
...
...
tests/EmbeddedRelationsTest.php
View file @
17b80284
...
...
@@ -423,70 +423,18 @@ class EmbeddedRelationsTest extends TestCase {
$this
->
assertEquals
([
'Paris'
,
'Bruges'
,
'Brussels'
,
'Ghent'
],
$user
->
addresses
()
->
lists
(
'city'
)
->
all
());
$this
->
assertEquals
([
'Bruges'
,
'Brussels'
,
'Ghent'
,
'Paris'
],
$user
->
addresses
()
->
sortBy
(
'city'
)
->
lists
(
'city'
)
->
all
());
$this
->
assertEquals
([
'Bruges'
,
'Brussels'
,
'Ghent'
,
'Paris'
],
$user
->
addresses
()
->
orderBy
(
'city'
)
->
lists
(
'city'
)
->
all
());
$this
->
assertEquals
([
'Paris'
,
'Ghent'
,
'Brussels'
,
'Bruges'
],
$user
->
addresses
()
->
orderBy
(
'city'
,
'desc'
)
->
lists
(
'city'
)
->
all
());
$this
->
assertEquals
([],
$user
->
addresses
()
->
where
(
'city'
,
'New York'
)
->
lists
(
'city'
)
->
all
());
$this
->
assertEquals
([
'Bruges'
,
'Brussels'
,
'Ghent'
],
$user
->
addresses
()
->
where
(
'country'
,
'Belgium'
)
->
lists
(
'city'
)
->
all
());
$this
->
assertEquals
([
'Ghent'
,
'Brussels'
,
'Bruges'
],
$user
->
addresses
()
->
where
(
'country'
,
'Belgium'
)
->
orderBy
(
'city'
,
'desc'
)
->
lists
(
'city'
)
->
all
());
$this
->
assertEquals
([
'Bruges'
,
'Brussels'
,
'Ghent'
],
$user
->
addresses
()
->
where
(
'country'
,
'Belgium'
)
->
sortBy
(
'city'
)
->
lists
(
'city'
)
->
all
());
$results
=
$user
->
addresses
->
get
(
0
);
$results
=
$user
->
addresses
->
first
(
);
$this
->
assertInstanceOf
(
'Address'
,
$results
);
$results
=
$user
->
addresses
()
->
where
(
'country'
,
'Belgium'
)
->
get
();
$this
->
assertInstanceOf
(
'Jenssegers\Mongodb\Eloquent\Collection'
,
$results
);
$this
->
assertEquals
(
3
,
$results
->
count
());
$results
=
$user
->
addresses
()
->
where
(
'country'
,
'!='
,
'Belgium'
)
->
get
();
$this
->
assertEquals
(
1
,
$results
->
count
());
$results
=
$user
->
addresses
()
->
where
(
'visited'
,
'>'
,
4
)
->
get
();
$this
->
assertEquals
(
2
,
$results
->
count
());
$results
=
$user
->
addresses
()
->
where
(
'visited'
,
'<'
,
7
)
->
get
();
$this
->
assertEquals
(
2
,
$results
->
count
());
$results
=
$user
->
addresses
()
->
where
(
'visited'
,
'<='
,
7
)
->
get
();
$this
->
assertEquals
(
3
,
$results
->
count
());
$results
=
$user
->
addresses
()
->
where
(
'visited'
,
'>='
,
7
)
->
get
();
$this
->
assertEquals
(
2
,
$results
->
count
());
$results
=
$user
->
addresses
()
->
where
(
'visited'
,
'between'
,
[
4
,
7
])
->
get
();
$this
->
assertEquals
(
2
,
$results
->
count
());
$results
=
$user
->
addresses
()
->
whereBetween
(
'visited'
,
[
4
,
7
])
->
get
();
$this
->
assertEquals
(
2
,
$results
->
count
());
$results
=
$user
->
addresses
()
->
whereNotBetween
(
'visited'
,
[
4
,
7
])
->
get
();
$this
->
assertEquals
(
2
,
$results
->
count
());
$results
=
$user
->
addresses
()
->
whereIn
(
'visited'
,
[
7
,
13
])
->
get
();
$this
->
assertEquals
(
2
,
$results
->
count
());
$results
=
$user
->
addresses
()
->
whereNotIn
(
'visited'
,
[
7
])
->
get
();
$this
->
assertEquals
(
3
,
$results
->
count
());
$results
=
$user
->
addresses
()
->
whereNull
(
'something'
)
->
get
();
$this
->
assertEquals
(
4
,
$results
->
count
());
$results
=
$user
->
addresses
()
->
whereNotNull
(
'visited'
)
->
get
();
$this
->
assertEquals
(
4
,
$results
->
count
());
$results
=
$user
->
addresses
()
->
offset
(
1
)
->
get
();
$results
=
$user
->
addresses
()
->
where
(
'country'
,
'Belgium'
);
$this
->
assertInstanceOf
(
'Illuminate\Database\Eloquent\Collection'
,
$results
);
$this
->
assertEquals
(
3
,
$results
->
count
());
$results
=
$user
->
addresses
()
->
skip
(
1
)
->
get
();
$this
->
assertEquals
(
3
,
$results
->
count
());
$results
=
$user
->
addresses
()
->
limit
(
2
)
->
get
();
$results
=
$user
->
addresses
()
->
whereIn
(
'visited'
,
[
7
,
13
]);
$this
->
assertEquals
(
2
,
$results
->
count
());
$result
=
$user
->
addresses
()
->
latest
()
->
first
();
$this
->
assertEquals
(
'Ghent'
,
$result
->
city
);
$result
=
$user
->
addresses
()
->
oldest
()
->
first
();
$this
->
assertEquals
(
'Bruges'
,
$result
->
city
);
}
public
function
testEmbedsOne
()
...
...
tests/TestCase.php
View file @
17b80284
...
...
@@ -34,6 +34,7 @@ class TestCase extends Orchestra\Testbench\TestCase {
$app
[
'config'
]
->
set
(
'database.connections.mongodb'
,
$config
[
'connections'
][
'mongodb'
]);
$app
[
'config'
]
->
set
(
'auth.model'
,
'User'
);
$app
[
'config'
]
->
set
(
'auth.providers.users.model'
,
'User'
);
$app
[
'config'
]
->
set
(
'cache.driver'
,
'array'
);
}
...
...
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