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
c16f41cd
Commit
c16f41cd
authored
Feb 03, 2016
by
Jens Segers
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Run PSR2 fixer
parent
17b80284
Show whitespace changes
Inline
Side-by-side
Showing
49 changed files
with
465 additions
and
634 deletions
+465
-634
Model.php
src/Jenssegers/Eloquent/Model.php
+2
-2
DatabaseTokenRepository.php
src/Jenssegers/Mongodb/Auth/DatabaseTokenRepository.php
+5
-9
PasswordResetServiceProvider.php
src/Jenssegers/Mongodb/Auth/PasswordResetServiceProvider.php
+3
-5
Collection.php
src/Jenssegers/Mongodb/Collection.php
+6
-12
Connection.php
src/Jenssegers/Mongodb/Connection.php
+8
-15
Builder.php
src/Jenssegers/Mongodb/Eloquent/Builder.php
+18
-25
HybridRelations.php
src/Jenssegers/Mongodb/Eloquent/HybridRelations.php
+16
-30
SoftDeletes.php
src/Jenssegers/Mongodb/Eloquent/SoftDeletes.php
+2
-2
Model.php
src/Jenssegers/Mongodb/Model.php
+48
-75
MongodbServiceProvider.php
src/Jenssegers/Mongodb/MongodbServiceProvider.php
+4
-7
Builder.php
src/Jenssegers/Mongodb/Query/Builder.php
+124
-164
Grammar.php
src/Jenssegers/Mongodb/Query/Grammar.php
+0
-1
Processor.php
src/Jenssegers/Mongodb/Query/Processor.php
+2
-2
BelongsTo.php
src/Jenssegers/Mongodb/Relations/BelongsTo.php
+3
-5
BelongsToMany.php
src/Jenssegers/Mongodb/Relations/BelongsToMany.php
+28
-24
EmbedsMany.php
src/Jenssegers/Mongodb/Relations/EmbedsMany.php
+33
-36
EmbedsOne.php
src/Jenssegers/Mongodb/Relations/EmbedsOne.php
+15
-14
EmbedsOneOrMany.php
src/Jenssegers/Mongodb/Relations/EmbedsOneOrMany.php
+23
-30
HasMany.php
src/Jenssegers/Mongodb/Relations/HasMany.php
+2
-3
HasOne.php
src/Jenssegers/Mongodb/Relations/HasOne.php
+2
-3
MorphTo.php
src/Jenssegers/Mongodb/Relations/MorphTo.php
+3
-5
Blueprint.php
src/Jenssegers/Mongodb/Schema/Blueprint.php
+9
-19
Builder.php
src/Jenssegers/Mongodb/Schema/Builder.php
+4
-7
AuthTest.php
tests/AuthTest.php
+4
-6
ConnectionTest.php
tests/ConnectionTest.php
+2
-2
EmbeddedRelationsTest.php
tests/EmbeddedRelationsTest.php
+2
-2
ModelTest.php
tests/ModelTest.php
+8
-11
MysqlRelationsTest.php
tests/MysqlRelationsTest.php
+2
-1
QueryBuilderTest.php
tests/QueryBuilderTest.php
+8
-8
QueryTest.php
tests/QueryTest.php
+12
-22
RelationsTest.php
tests/RelationsTest.php
+4
-6
SchemaTest.php
tests/SchemaTest.php
+23
-39
SeederTest.php
tests/SeederTest.php
+2
-2
TestCase.php
tests/TestCase.php
+2
-3
ValidationTest.php
tests/ValidationTest.php
+2
-2
Address.php
tests/models/Address.php
+2
-2
Book.php
tests/models/Book.php
+2
-1
Client.php
tests/models/Client.php
+2
-1
Group.php
tests/models/Group.php
+2
-1
Item.php
tests/models/Item.php
+2
-2
MysqlBook.php
tests/models/MysqlBook.php
+4
-6
MysqlRole.php
tests/models/MysqlRole.php
+4
-6
MysqlUser.php
tests/models/MysqlUser.php
+4
-6
Photo.php
tests/models/Photo.php
+2
-2
Role.php
tests/models/Role.php
+2
-2
Soft.php
tests/models/Soft.php
+2
-2
User.php
tests/models/User.php
+2
-1
DatabaseSeeder.php
tests/seeds/DatabaseSeeder.php
+2
-2
UserTableSeeder.php
tests/seeds/UserTableSeeder.php
+2
-1
No files found.
src/Jenssegers/Eloquent/Model.php
View file @
c16f41cd
...
...
@@ -2,8 +2,8 @@
use
Jenssegers\Mongodb\Eloquent\HybridRelations
;
abstract
class
Model
extends
\Illuminate\Database\Eloquent\Model
{
abstract
class
Model
extends
\Illuminate\Database\Eloquent\Model
{
use
HybridRelations
;
}
src/Jenssegers/Mongodb/Auth/DatabaseTokenRepository.php
View file @
c16f41cd
...
...
@@ -3,8 +3,8 @@
use
DateTime
;
use
MongoDate
;
class
DatabaseTokenRepository
extends
\Illuminate\Auth\Passwords\DatabaseTokenRepository
{
class
DatabaseTokenRepository
extends
\Illuminate\Auth\Passwords\DatabaseTokenRepository
{
/**
* Build the record payload for the table.
*
...
...
@@ -26,20 +26,16 @@ class DatabaseTokenRepository extends \Illuminate\Auth\Passwords\DatabaseTokenRe
protected
function
tokenExpired
(
$token
)
{
// Convert MongoDate to a date string.
if
(
$token
[
'created_at'
]
instanceof
MongoDate
)
{
if
(
$token
[
'created_at'
]
instanceof
MongoDate
)
{
$date
=
new
DateTime
;
$date
->
setTimestamp
(
$token
[
'created_at'
]
->
sec
);
$token
[
'created_at'
]
=
$date
->
format
(
'Y-m-d H:i:s'
);
}
elseif
(
is_array
(
$token
[
'created_at'
])
and
isset
(
$token
[
'created_at'
][
'date'
]))
{
}
elseif
(
is_array
(
$token
[
'created_at'
])
and
isset
(
$token
[
'created_at'
][
'date'
]))
{
$token
[
'created_at'
]
=
$token
[
'created_at'
][
'date'
];
}
return
parent
::
tokenExpired
(
$token
);
}
}
src/Jenssegers/Mongodb/Auth/PasswordResetServiceProvider.php
View file @
c16f41cd
...
...
@@ -2,8 +2,8 @@
use
Jenssegers\Mongodb\Auth\DatabaseTokenRepository
as
DbRepository
;
class
PasswordResetServiceProvider
extends
\Illuminate\Auth\Passwords\PasswordResetServiceProvider
{
class
PasswordResetServiceProvider
extends
\Illuminate\Auth\Passwords\PasswordResetServiceProvider
{
/**
* Register the token repository implementation.
*
...
...
@@ -11,8 +11,7 @@ class PasswordResetServiceProvider extends \Illuminate\Auth\Passwords\PasswordRe
*/
protected
function
registerTokenRepository
()
{
$this
->
app
->
singleton
(
'auth.password.tokens'
,
function
(
$app
)
{
$this
->
app
->
singleton
(
'auth.password.tokens'
,
function
(
$app
)
{
$connection
=
$app
[
'db'
]
->
connection
();
// The database token repository is an implementation of the token repository
...
...
@@ -25,5 +24,4 @@ class PasswordResetServiceProvider extends \Illuminate\Auth\Passwords\PasswordRe
return
new
DbRepository
(
$connection
,
$table
,
$key
,
$expire
);
});
}
}
src/Jenssegers/Mongodb/Collection.php
View file @
c16f41cd
...
...
@@ -3,8 +3,8 @@
use
Exception
;
use
MongoCollection
;
class
Collection
{
class
Collection
{
/**
* The connection instance.
*
...
...
@@ -41,8 +41,7 @@ class Collection {
$result
=
call_user_func_array
([
$this
->
collection
,
$method
],
$parameters
);
if
(
$this
->
connection
->
logging
())
{
if
(
$this
->
connection
->
logging
())
{
// Once we have run the query we will calculate the time that it took to run and
// then log the query, bindings, and execution time so we will report them on
// the event that the developer needs them. We'll log time in milliseconds.
...
...
@@ -51,14 +50,10 @@ class Collection {
$query
=
[];
// Convert the query paramters to a json string.
foreach
(
$parameters
as
$parameter
)
{
try
{
foreach
(
$parameters
as
$parameter
)
{
try
{
$query
[]
=
json_encode
(
$parameter
);
}
catch
(
Exception
$e
)
{
}
catch
(
Exception
$e
)
{
$query
[]
=
'{...}'
;
}
}
...
...
@@ -70,5 +65,4 @@ class Collection {
return
$result
;
}
}
src/Jenssegers/Mongodb/Connection.php
View file @
c16f41cd
...
...
@@ -2,8 +2,8 @@
use
MongoClient
;
class
Connection
extends
\Illuminate\Database\Connection
{
class
Connection
extends
\Illuminate\Database\Connection
{
/**
* The MongoDB database handler.
*
...
...
@@ -131,21 +131,18 @@ class Connection extends \Illuminate\Database\Connection {
{
// Add credentials as options, this makes sure the connection will not fail if
// the username or password contains strange characters.
if
(
!
empty
(
$config
[
'username'
]))
{
if
(
!
empty
(
$config
[
'username'
]))
{
$options
[
'username'
]
=
$config
[
'username'
];
}
if
(
!
empty
(
$config
[
'password'
]))
{
if
(
!
empty
(
$config
[
'password'
]))
{
$options
[
'password'
]
=
$config
[
'password'
];
}
// By default driver options is an empty array.
$driverOptions
=
[];
if
(
isset
(
$config
[
'driver_options'
])
&&
is_array
(
$config
[
'driver_options'
]))
{
if
(
isset
(
$config
[
'driver_options'
])
&&
is_array
(
$config
[
'driver_options'
]))
{
$driverOptions
=
$config
[
'driver_options'
];
}
...
...
@@ -174,19 +171,16 @@ class Connection extends \Illuminate\Database\Connection {
extract
(
$config
);
// Check if the user passed a complete dsn to the configuration.
if
(
!
empty
(
$dsn
))
{
if
(
!
empty
(
$dsn
))
{
return
$dsn
;
}
// Treat host option as array of hosts
$hosts
=
is_array
(
$host
)
?
$host
:
[
$host
];
foreach
(
$hosts
as
&
$host
)
{
foreach
(
$hosts
as
&
$host
)
{
// Check if we need to add a port to the host
if
(
strpos
(
$host
,
':'
)
===
false
and
isset
(
$port
))
{
if
(
strpos
(
$host
,
':'
)
===
false
and
isset
(
$port
))
{
$host
=
"
{
$host
}
:
{
$port
}
"
;
}
}
...
...
@@ -228,5 +222,4 @@ class Connection extends \Illuminate\Database\Connection {
{
return
call_user_func_array
([
$this
->
db
,
$method
],
$parameters
);
}
}
src/Jenssegers/Mongodb/Eloquent/Builder.php
View file @
c16f41cd
...
...
@@ -4,8 +4,8 @@ use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use
Illuminate\Database\Eloquent\Relations\Relation
;
use
MongoCursor
;
class
Builder
extends
EloquentBuilder
{
class
Builder
extends
EloquentBuilder
{
/**
* The methods that should be returned from query builder.
*
...
...
@@ -26,8 +26,7 @@ class Builder extends EloquentBuilder {
{
// Intercept operations on embedded models and delegate logic
// to the parent relation instance.
if
(
$relation
=
$this
->
model
->
getParentRelation
())
{
if
(
$relation
=
$this
->
model
->
getParentRelation
())
{
$relation
->
performUpdate
(
$this
->
model
,
$values
);
return
1
;
...
...
@@ -46,8 +45,7 @@ class Builder extends EloquentBuilder {
{
// Intercept operations on embedded models and delegate logic
// to the parent relation instance.
if
(
$relation
=
$this
->
model
->
getParentRelation
())
{
if
(
$relation
=
$this
->
model
->
getParentRelation
())
{
$relation
->
performInsert
(
$this
->
model
,
$values
);
return
true
;
...
...
@@ -67,8 +65,7 @@ class Builder extends EloquentBuilder {
{
// Intercept operations on embedded models and delegate logic
// to the parent relation instance.
if
(
$relation
=
$this
->
model
->
getParentRelation
())
{
if
(
$relation
=
$this
->
model
->
getParentRelation
())
{
$relation
->
performInsert
(
$this
->
model
,
$values
);
return
$this
->
model
->
getKey
();
...
...
@@ -86,8 +83,7 @@ class Builder extends EloquentBuilder {
{
// Intercept operations on embedded models and delegate logic
// to the parent relation instance.
if
(
$relation
=
$this
->
model
->
getParentRelation
())
{
if
(
$relation
=
$this
->
model
->
getParentRelation
())
{
$relation
->
performDelete
(
$this
->
model
);
return
$this
->
model
->
getKey
();
...
...
@@ -108,8 +104,7 @@ class Builder extends EloquentBuilder {
{
// Intercept operations on embedded models and delegate logic
// to the parent relation instance.
if
(
$relation
=
$this
->
model
->
getParentRelation
())
{
if
(
$relation
=
$this
->
model
->
getParentRelation
())
{
$value
=
$this
->
model
->
{
$column
};
// When doing increment and decrements, Eloquent will automatically
...
...
@@ -139,8 +134,7 @@ class Builder extends EloquentBuilder {
{
// Intercept operations on embedded models and delegate logic
// to the parent relation instance.
if
(
$relation
=
$this
->
model
->
getParentRelation
())
{
if
(
$relation
=
$this
->
model
->
getParentRelation
())
{
$value
=
$this
->
model
->
{
$column
};
// When doing increment and decrements, Eloquent will automatically
...
...
@@ -174,13 +168,13 @@ class Builder extends EloquentBuilder {
$relationCount
=
array_count_values
(
$query
->
lists
(
$relation
->
getHasCompareKey
()));
// Remove unwanted related objects based on the operator and count.
$relationCount
=
array_filter
(
$relationCount
,
function
(
$counted
)
use
(
$count
,
$operator
)
{
$relationCount
=
array_filter
(
$relationCount
,
function
(
$counted
)
use
(
$count
,
$operator
)
{
// If we are comparing to 0, we always need all results.
if
(
$count
==
0
)
return
true
;
if
(
$count
==
0
)
{
return
true
;
}
switch
(
$operator
)
{
switch
(
$operator
)
{
case
'>='
:
case
'<'
:
return
$counted
>=
$count
;
...
...
@@ -197,7 +191,9 @@ class Builder extends EloquentBuilder {
$not
=
in_array
(
$operator
,
[
'<'
,
'<='
,
'!='
]);
// If we are comparing to 0, we need an additional $not flip.
if
(
$count
==
0
)
$not
=
!
$not
;
if
(
$count
==
0
)
{
$not
=
!
$not
;
}
// All related ids.
$relatedIds
=
array_keys
(
$relationCount
);
...
...
@@ -218,16 +214,14 @@ class Builder extends EloquentBuilder {
$results
=
$this
->
query
->
raw
(
$expression
);
// Convert MongoCursor results to a collection of models.
if
(
$results
instanceof
MongoCursor
)
{
if
(
$results
instanceof
MongoCursor
)
{
$results
=
iterator_to_array
(
$results
,
false
);
return
$this
->
model
->
hydrate
(
$results
);
}
// The result is a single object.
elseif
(
is_array
(
$results
)
and
array_key_exists
(
'_id'
,
$results
))
{
elseif
(
is_array
(
$results
)
and
array_key_exists
(
'_id'
,
$results
))
{
$model
=
$this
->
model
->
newFromBuilder
(
$results
);
$model
->
setConnection
(
$this
->
model
->
getConnection
());
...
...
@@ -237,5 +231,4 @@ class Builder extends EloquentBuilder {
return
$results
;
}
}
src/Jenssegers/Mongodb/Eloquent/HybridRelations.php
View file @
c16f41cd
...
...
@@ -10,8 +10,8 @@ use Jenssegers\Mongodb\Relations\HasMany;
use
Jenssegers\Mongodb\Relations\HasOne
;
use
Jenssegers\Mongodb\Relations\MorphTo
;
trait
HybridRelations
{
trait
HybridRelations
{
/**
* Define a one-to-one relationship.
*
...
...
@@ -23,8 +23,7 @@ trait HybridRelations {
public
function
hasOne
(
$related
,
$foreignKey
=
null
,
$localKey
=
null
)
{
// Check if it is a relation with an original model.
if
(
!
is_subclass_of
(
$related
,
'Jenssegers\Mongodb\Model'
))
{
if
(
!
is_subclass_of
(
$related
,
'Jenssegers\Mongodb\Model'
))
{
return
parent
::
hasOne
(
$related
,
$foreignKey
,
$localKey
);
}
...
...
@@ -50,9 +49,8 @@ trait HybridRelations {
public
function
morphOne
(
$related
,
$name
,
$type
=
null
,
$id
=
null
,
$localKey
=
null
)
{
// Check if it is a relation with an original model.
if
(
!
is_subclass_of
(
$related
,
'Jenssegers\Mongodb\Model'
))
{
return
parent
::
morphOne
(
$related
,
$name
,
$type
,
$id
,
$localKey
);
if
(
!
is_subclass_of
(
$related
,
'Jenssegers\Mongodb\Model'
))
{
return
parent
::
morphOne
(
$related
,
$name
,
$type
,
$id
,
$localKey
);
}
$instance
=
new
$related
;
...
...
@@ -77,8 +75,7 @@ trait HybridRelations {
public
function
hasMany
(
$related
,
$foreignKey
=
null
,
$localKey
=
null
)
{
// Check if it is a relation with an original model.
if
(
!
is_subclass_of
(
$related
,
'Jenssegers\Mongodb\Model'
))
{
if
(
!
is_subclass_of
(
$related
,
'Jenssegers\Mongodb\Model'
))
{
return
parent
::
hasMany
(
$related
,
$foreignKey
,
$localKey
);
}
...
...
@@ -104,8 +101,7 @@ trait HybridRelations {
public
function
morphMany
(
$related
,
$name
,
$type
=
null
,
$id
=
null
,
$localKey
=
null
)
{
// Check if it is a relation with an original model.
if
(
!
is_subclass_of
(
$related
,
'Jenssegers\Mongodb\Model'
))
{
if
(
!
is_subclass_of
(
$related
,
'Jenssegers\Mongodb\Model'
))
{
return
parent
::
morphMany
(
$related
,
$name
,
$type
,
$id
,
$localKey
);
}
...
...
@@ -137,24 +133,21 @@ trait HybridRelations {
// If no relation name was given, we will use this debug backtrace to extract
// the calling method's name and use that as the relationship name as most
// of the time this will be what we desire to use for the relationships.
if
(
is_null
(
$relation
))
{
if
(
is_null
(
$relation
))
{
list
(
$current
,
$caller
)
=
debug_backtrace
(
false
,
2
);
$relation
=
$caller
[
'function'
];
}
// Check if it is a relation with an original model.
if
(
!
is_subclass_of
(
$related
,
'Jenssegers\Mongodb\Model'
))
{
if
(
!
is_subclass_of
(
$related
,
'Jenssegers\Mongodb\Model'
))
{
return
parent
::
belongsTo
(
$related
,
$foreignKey
,
$otherKey
,
$relation
);
}
// If no foreign key was supplied, we can use a backtrace to guess the proper
// foreign key name by using the name of the relationship function, which
// when combined with an "_id" should conventionally match the columns.
if
(
is_null
(
$foreignKey
))
{
if
(
is_null
(
$foreignKey
))
{
$foreignKey
=
Str
::
snake
(
$relation
)
.
'_id'
;
}
...
...
@@ -183,8 +176,7 @@ trait HybridRelations {
// If no name is provided, we will use the backtrace to get the function name
// since that is most likely the name of the polymorphic interface. We can
// use that to get both the class and foreign key that will be utilized.
if
(
is_null
(
$name
))
{
if
(
is_null
(
$name
))
{
list
(
$current
,
$caller
)
=
debug_backtrace
(
DEBUG_BACKTRACE_IGNORE_ARGS
,
2
);
$name
=
Str
::
snake
(
$caller
[
'function'
]);
...
...
@@ -195,8 +187,7 @@ trait HybridRelations {
// If the type value is null it is probably safe to assume we're eager loading
// the relationship. When that is the case we will pass in a dummy query as
// there are multiple types in the morph and we can't use single queries.
if
(
is_null
(
$class
=
$this
->
$type
))
{
if
(
is_null
(
$class
=
$this
->
$type
))
{
return
new
MorphTo
(
$this
->
newQuery
(),
$this
,
$id
,
null
,
$type
,
$name
);
...
...
@@ -205,8 +196,7 @@ trait HybridRelations {
// If we are not eager loading the relationship we will essentially treat this
// as a belongs-to style relationship since morph-to extends that class and
// we will pass in the appropriate values so that it behaves as expected.
else
{
else
{
$class
=
$this
->
getActualClassNameForMorph
(
$class
);
$instance
=
new
$class
;
...
...
@@ -232,14 +222,12 @@ trait HybridRelations {
// If no relationship name was passed, we will pull backtraces to get the
// name of the calling function. We will use that function name as the
// title of this relation since that is a great convention to apply.
if
(
is_null
(
$relation
))
{
if
(
is_null
(
$relation
))
{
$relation
=
$this
->
getBelongsToManyCaller
();
}
// Check if it is a relation with an original model.
if
(
!
is_subclass_of
(
$related
,
'Jenssegers\Mongodb\Model'
))
{
if
(
!
is_subclass_of
(
$related
,
'Jenssegers\Mongodb\Model'
))
{
return
parent
::
belongsToMany
(
$related
,
$collection
,
$foreignKey
,
$otherKey
,
$relation
);
}
...
...
@@ -255,8 +243,7 @@ trait HybridRelations {
// If no table name was provided, we can guess it by concatenating the two
// models using underscores in alphabetical order. The two model names
// are transformed to snake case from their default CamelCase also.
if
(
is_null
(
$collection
))
{
if
(
is_null
(
$collection
))
{
$collection
=
$instance
->
getTable
();
}
...
...
@@ -267,5 +254,4 @@ trait HybridRelations {
return
new
BelongsToMany
(
$query
,
$this
,
$collection
,
$foreignKey
,
$otherKey
,
$relation
);
}
}
src/Jenssegers/Mongodb/Eloquent/SoftDeletes.php
View file @
c16f41cd
<?php
namespace
Jenssegers\Mongodb\Eloquent
;
trait
SoftDeletes
{
trait
SoftDeletes
{
use
\Illuminate\Database\Eloquent\SoftDeletes
;
...
...
@@ -13,5 +14,4 @@ trait SoftDeletes {
{
return
$this
->
getDeletedAtColumn
();
}
}
src/Jenssegers/Mongodb/Model.php
View file @
c16f41cd
...
...
@@ -14,7 +14,8 @@ use MongoDate;
use
MongoId
;
use
ReflectionMethod
;
abstract
class
Model
extends
BaseModel
{
abstract
class
Model
extends
BaseModel
{
use
HybridRelations
;
...
...
@@ -49,14 +50,12 @@ abstract class Model extends BaseModel {
{
// If we don't have a value for 'id', we will use the Mongo '_id' value.
// This allows us to work with models in a more sql-like way.
if
(
!
$value
and
array_key_exists
(
'_id'
,
$this
->
attributes
))
{
if
(
!
$value
and
array_key_exists
(
'_id'
,
$this
->
attributes
))
{
$value
=
$this
->
attributes
[
'_id'
];
}
// Convert MongoId's to string.
if
(
$value
instanceof
MongoId
)
{
if
(
$value
instanceof
MongoId
)
{
return
(
string
)
$value
;
}
...
...
@@ -87,20 +86,17 @@ abstract class Model extends BaseModel {
// If no relation name was given, we will use this debug backtrace to extract
// the calling method's name and use that as the relationship name as most
// of the time this will be what we desire to use for the relatinoships.
if
(
is_null
(
$relation
))
{
if
(
is_null
(
$relation
))
{
list
(,
$caller
)
=
debug_backtrace
(
false
);
$relation
=
$caller
[
'function'
];
}
if
(
is_null
(
$localKey
))
{
if
(
is_null
(
$localKey
))
{
$localKey
=
$relation
;
}
if
(
is_null
(
$foreignKey
))
{
if
(
is_null
(
$foreignKey
))
{
$foreignKey
=
snake_case
(
class_basename
(
$this
));
}
...
...
@@ -125,20 +121,17 @@ abstract class Model extends BaseModel {
// If no relation name was given, we will use this debug backtrace to extract
// the calling method's name and use that as the relationship name as most
// of the time this will be what we desire to use for the relatinoships.
if
(
is_null
(
$relation
))
{
if
(
is_null
(
$relation
))
{
list
(,
$caller
)
=
debug_backtrace
(
false
);
$relation
=
$caller
[
'function'
];
}
if
(
is_null
(
$localKey
))
{
if
(
is_null
(
$localKey
))
{
$localKey
=
$relation
;
}
if
(
is_null
(
$foreignKey
))
{
if
(
is_null
(
$foreignKey
))
{
$foreignKey
=
snake_case
(
class_basename
(
$this
));
}
...
...
@@ -158,14 +151,12 @@ abstract class Model extends BaseModel {
public
function
fromDateTime
(
$value
)
{
// If the value is already a MongoDate instance, we don't need to parse it.
if
(
$value
instanceof
MongoDate
)
{
if
(
$value
instanceof
MongoDate
)
{
return
$value
;
}
// Let Eloquent convert the value to a DateTime instance.
if
(
!
$value
instanceof
DateTime
)
{
if
(
!
$value
instanceof
DateTime
)
{
$value
=
parent
::
asDateTime
(
$value
);
}
...
...
@@ -181,8 +172,7 @@ abstract class Model extends BaseModel {
protected
function
asDateTime
(
$value
)
{
// Convert MongoDate instances.
if
(
$value
instanceof
MongoDate
)
{
if
(
$value
instanceof
MongoDate
)
{
return
Carbon
::
createFromTimestamp
(
$value
->
sec
);
}
...
...
@@ -228,8 +218,7 @@ abstract class Model extends BaseModel {
public
function
getAttribute
(
$key
)
{
// Check if the key is an array dot notation.
if
(
str_contains
(
$key
,
'.'
)
and
array_has
(
$this
->
attributes
,
$key
))
{
if
(
str_contains
(
$key
,
'.'
)
and
array_has
(
$this
->
attributes
,
$key
))
{
return
$this
->
getAttributeValue
(
$key
);
}
...
...
@@ -238,24 +227,20 @@ abstract class Model extends BaseModel {
// If the "attribute" exists as a method on the model, it may be an
// embedded model. If so, we need to return the result before it
// is handled by the parent method.
if
(
method_exists
(
$this
,
$camelKey
))
{
if
(
method_exists
(
$this
,
$camelKey
))
{
$method
=
new
ReflectionMethod
(
get_called_class
(),
$camelKey
);
// Ensure the method is not static to avoid conflicting with Eloquent methods.
if
(
!
$method
->
isStatic
())
{
if
(
!
$method
->
isStatic
())
{
$relations
=
$this
->
$camelKey
();
// This attribute matches an embedsOne or embedsMany relation so we need
// to return the relation results instead of the interal attributes.
if
(
$relations
instanceof
EmbedsOneOrMany
)
{
if
(
$relations
instanceof
EmbedsOneOrMany
)
{
// If the key already exists in the relationships array, it just means the
// relationship has already been loaded, so we'll just return it out of
// here because there is no need to query within the relations twice.
if
(
array_key_exists
(
$key
,
$this
->
relations
))
{
if
(
array_key_exists
(
$key
,
$this
->
relations
))
{
return
$this
->
relations
[
$key
];
}
...
...
@@ -277,12 +262,10 @@ abstract class Model extends BaseModel {
protected
function
getAttributeFromArray
(
$key
)
{
// Support keys in dot notation.
if
(
str_contains
(
$key
,
'.'
))
{
if
(
str_contains
(
$key
,
'.'
))
{
$attributes
=
array_dot
(
$this
->
attributes
);
if
(
array_key_exists
(
$key
,
$attributes
))
{
if
(
array_key_exists
(
$key
,
$attributes
))
{
return
$attributes
[
$key
];
}
}
...
...
@@ -299,18 +282,15 @@ abstract class Model extends BaseModel {
public
function
setAttribute
(
$key
,
$value
)
{
// Convert _id to MongoId.
if
(
$key
==
'_id'
and
is_string
(
$value
))
{
if
(
$key
==
'_id'
and
is_string
(
$value
))
{
$builder
=
$this
->
newBaseQueryBuilder
();
$value
=
$builder
->
convertKey
(
$value
);
}
// Support keys in dot notation.
elseif
(
str_contains
(
$key
,
'.'
))
{
if
(
in_array
(
$key
,
$this
->
getDates
())
&&
$value
)
{
elseif
(
str_contains
(
$key
,
'.'
))
{
if
(
in_array
(
$key
,
$this
->
getDates
())
&&
$value
)
{
$value
=
$this
->
fromDateTime
(
$value
);
}
...
...
@@ -345,19 +325,15 @@ abstract class Model extends BaseModel {
// MongoDB related objects to a string representation. This kind
// of mimics the SQL behaviour so that dates are formatted
// nicely when your models are converted to JSON.
foreach
(
$attributes
as
$key
=>
&
$value
)
{
if
(
$value
instanceof
MongoId
)
{
foreach
(
$attributes
as
$key
=>
&
$value
)
{
if
(
$value
instanceof
MongoId
)
{
$value
=
(
string
)
$value
;
}
}
// Convert dot-notation dates.
foreach
(
$this
->
getDates
()
as
$key
)
{
if
(
str_contains
(
$key
,
'.'
)
and
array_has
(
$attributes
,
$key
))
{
foreach
(
$this
->
getDates
()
as
$key
)
{
if
(
str_contains
(
$key
,
'.'
)
and
array_has
(
$attributes
,
$key
))
{
array_set
(
$attributes
,
$key
,
(
string
)
$this
->
asDateTime
(
array_get
(
$attributes
,
$key
)));
}
}
...
...
@@ -378,8 +354,7 @@ abstract class Model extends BaseModel {
$original
=
$this
->
original
[
$key
];
// Date comparison.
if
(
in_array
(
$key
,
$this
->
getDates
()))
{
if
(
in_array
(
$key
,
$this
->
getDates
()))
{
$current
=
$current
instanceof
MongoDate
?
$this
->
asDateTime
(
$current
)
:
$current
;
$original
=
$original
instanceof
MongoDate
?
$this
->
asDateTime
(
$original
)
:
$original
;
...
...
@@ -397,11 +372,12 @@ abstract class Model extends BaseModel {
*/
public
function
drop
(
$columns
)
{
if
(
!
is_array
(
$columns
))
$columns
=
[
$columns
];
if
(
!
is_array
(
$columns
))
{
$columns
=
[
$columns
];
}
// Unset attributes
foreach
(
$columns
as
$column
)
{
foreach
(
$columns
as
$column
)
{
$this
->
__unset
(
$column
);
}
...
...
@@ -416,21 +392,19 @@ abstract class Model extends BaseModel {
*/
public
function
push
()
{
if
(
$parameters
=
func_get_args
())
{
if
(
$parameters
=
func_get_args
())
{
$unique
=
false
;
if
(
count
(
$parameters
)
==
3
)
{
if
(
count
(
$parameters
)
==
3
)
{
list
(
$column
,
$values
,
$unique
)
=
$parameters
;
}
else
{
}
else
{
list
(
$column
,
$values
)
=
$parameters
;
}
// Do batch push by default.
if
(
!
is_array
(
$values
))
$values
=
[
$values
];
if
(
!
is_array
(
$values
))
{
$values
=
[
$values
];
}
$query
=
$this
->
setKeysForSaveQuery
(
$this
->
newQuery
());
...
...
@@ -452,7 +426,9 @@ abstract class Model extends BaseModel {
public
function
pull
(
$column
,
$values
)
{
// Do batch pull by default.
if
(
!
is_array
(
$values
))
$values
=
[
$values
];
if
(
!
is_array
(
$values
))
{
$values
=
[
$values
];
}
$query
=
$this
->
setKeysForSaveQuery
(
$this
->
newQuery
());
...
...
@@ -472,10 +448,11 @@ abstract class Model extends BaseModel {
{
$current
=
$this
->
getAttributeFromArray
(
$column
)
?:
[];
foreach
(
$values
as
$value
)
{
foreach
(
$values
as
$value
)
{
// Don't add duplicate values when we only want unique values.
if
(
$unique
and
in_array
(
$value
,
$current
))
continue
;
if
(
$unique
and
in_array
(
$value
,
$current
))
{
continue
;
}
array_push
(
$current
,
$value
);
}
...
...
@@ -495,12 +472,10 @@ abstract class Model extends BaseModel {
{
$current
=
$this
->
getAttributeFromArray
(
$column
)
?:
[];
foreach
(
$values
as
$value
)
{
foreach
(
$values
as
$value
)
{
$keys
=
array_keys
(
$current
,
$value
);
foreach
(
$keys
as
$key
)
{
foreach
(
$keys
as
$key
)
{
unset
(
$current
[
$key
]);
}
}
...
...
@@ -563,12 +538,10 @@ abstract class Model extends BaseModel {
public
function
__call
(
$method
,
$parameters
)
{
// Unset method
if
(
$method
==
'unset'
)
{
if
(
$method
==
'unset'
)
{
return
call_user_func_array
([
$this
,
'drop'
],
$parameters
);
}
return
parent
::
__call
(
$method
,
$parameters
);
}
}
src/Jenssegers/Mongodb/MongodbServiceProvider.php
View file @
c16f41cd
...
...
@@ -2,8 +2,8 @@
use
Illuminate\Support\ServiceProvider
;
class
MongodbServiceProvider
extends
ServiceProvider
{
class
MongodbServiceProvider
extends
ServiceProvider
{
/**
* Bootstrap the application events.
*/
...
...
@@ -19,13 +19,10 @@ class MongodbServiceProvider extends ServiceProvider {
*/
public
function
register
()
{
$this
->
app
->
resolving
(
'db'
,
function
(
$db
)
{
$db
->
extend
(
'mongodb'
,
function
(
$config
)
{
$this
->
app
->
resolving
(
'db'
,
function
(
$db
)
{
$db
->
extend
(
'mongodb'
,
function
(
$config
)
{
return
new
Connection
(
$config
);
});
});
}
}
src/Jenssegers/Mongodb/Query/Builder.php
View file @
c16f41cd
...
...
@@ -11,8 +11,8 @@ use MongoDate;
use
MongoId
;
use
MongoRegex
;
class
Builder
extends
BaseBuilder
{
class
Builder
extends
BaseBuilder
{
/**
* The database collection.
*
...
...
@@ -163,24 +163,25 @@ class Builder extends BaseBuilder {
// If no columns have been specified for the select statement, we will set them
// here to either the passed columns, or the standard default of retrieving
// all of the columns on the table using the "wildcard" column character.
if
(
is_null
(
$this
->
columns
))
$this
->
columns
=
$columns
;
if
(
is_null
(
$this
->
columns
))
{
$this
->
columns
=
$columns
;
}
// Drop all columns if * is present, MongoDB does not work this way.
if
(
in_array
(
'*'
,
$this
->
columns
))
$this
->
columns
=
[];
if
(
in_array
(
'*'
,
$this
->
columns
))
{
$this
->
columns
=
[];
}
// Compile wheres
$wheres
=
$this
->
compileWheres
();
// Use MongoDB's aggregation framework when using grouping or aggregation functions.
if
(
$this
->
groups
or
$this
->
aggregate
or
$this
->
paginating
)
{
if
(
$this
->
groups
or
$this
->
aggregate
or
$this
->
paginating
)
{
$group
=
[];
// Add grouping columns to the $group part of the aggregation pipeline.
if
(
$this
->
groups
)
{
foreach
(
$this
->
groups
as
$column
)
{
if
(
$this
->
groups
)
{
foreach
(
$this
->
groups
as
$column
)
{
$group
[
'_id'
][
$column
]
=
'$'
.
$column
;
// When grouping, also add the $last operator to each grouped field,
...
...
@@ -189,8 +190,7 @@ class Builder extends BaseBuilder {
}
// Do the same for other columns that are selected.
foreach
(
$this
->
columns
as
$column
)
{
foreach
(
$this
->
columns
as
$column
)
{
$key
=
str_replace
(
'.'
,
'_'
,
$column
);
$group
[
$key
]
=
[
'$last'
=>
'$'
.
$column
];
...
...
@@ -199,20 +199,16 @@ class Builder extends BaseBuilder {
// Add aggregation functions to the $group part of the aggregation pipeline,
// these may override previous aggregations.
if
(
$this
->
aggregate
)
{
if
(
$this
->
aggregate
)
{
$function
=
$this
->
aggregate
[
'function'
];
foreach
(
$this
->
aggregate
[
'columns'
]
as
$column
)
{
foreach
(
$this
->
aggregate
[
'columns'
]
as
$column
)
{
// Translate count into sum.
if
(
$function
==
'count'
)
{
if
(
$function
==
'count'
)
{
$group
[
'aggregate'
]
=
[
'$sum'
=>
1
];
}
// Pass other functions directly.
else
{
else
{
$group
[
'aggregate'
]
=
[
'$'
.
$function
=>
'$'
.
$column
];
}
}
...
...
@@ -220,30 +216,39 @@ class Builder extends BaseBuilder {
// When using pagination, we limit the number of returned columns
// by adding a projection.
if
(
$this
->
paginating
)
{
foreach
(
$this
->
columns
as
$column
)
{
if
(
$this
->
paginating
)
{
foreach
(
$this
->
columns
as
$column
)
{
$this
->
projections
[
$column
]
=
1
;
}
}
// The _id field is mandatory when using grouping.
if
(
$group
and
empty
(
$group
[
'_id'
]))
{
if
(
$group
and
empty
(
$group
[
'_id'
]))
{
$group
[
'_id'
]
=
null
;
}
// Build the aggregation pipeline.
$pipeline
=
[];
if
(
$wheres
)
$pipeline
[]
=
[
'$match'
=>
$wheres
];
if
(
$group
)
$pipeline
[]
=
[
'$group'
=>
$group
];
if
(
$wheres
)
{
$pipeline
[]
=
[
'$match'
=>
$wheres
];
}
if
(
$group
)
{
$pipeline
[]
=
[
'$group'
=>
$group
];
}
// Apply order and limit
if
(
$this
->
orders
)
$pipeline
[]
=
[
'$sort'
=>
$this
->
orders
];
if
(
$this
->
offset
)
$pipeline
[]
=
[
'$skip'
=>
$this
->
offset
];
if
(
$this
->
limit
)
$pipeline
[]
=
[
'$limit'
=>
$this
->
limit
];
if
(
$this
->
projections
)
$pipeline
[]
=
[
'$project'
=>
$this
->
projections
];
if
(
$this
->
orders
)
{
$pipeline
[]
=
[
'$sort'
=>
$this
->
orders
];
}
if
(
$this
->
offset
)
{
$pipeline
[]
=
[
'$skip'
=>
$this
->
offset
];
}
if
(
$this
->
limit
)
{
$pipeline
[]
=
[
'$limit'
=>
$this
->
limit
];
}
if
(
$this
->
projections
)
{
$pipeline
[]
=
[
'$project'
=>
$this
->
projections
];
}
// Execute aggregation
$results
=
$this
->
collection
->
aggregate
(
$pipeline
);
...
...
@@ -253,18 +258,14 @@ class Builder extends BaseBuilder {
}
// Distinct query
elseif
(
$this
->
distinct
)
{
elseif
(
$this
->
distinct
)
{
// Return distinct results directly
$column
=
isset
(
$this
->
columns
[
0
])
?
$this
->
columns
[
0
]
:
'_id'
;
// Execute distinct
if
(
$wheres
)
{
if
(
$wheres
)
{
$result
=
$this
->
collection
->
distinct
(
$column
,
$wheres
);
}
else
{
}
else
{
$result
=
$this
->
collection
->
distinct
(
$column
);
}
...
...
@@ -272,19 +273,16 @@ class Builder extends BaseBuilder {
}
// Normal query
else
{
else
{
$columns
=
[];
// Convert select columns to simple projections.
foreach
(
$this
->
columns
as
$column
)
{
foreach
(
$this
->
columns
as
$column
)
{
$columns
[
$column
]
=
true
;
}
// Add custom projections.
if
(
$this
->
projections
)
{
if
(
$this
->
projections
)
{
$columns
=
array_merge
(
$columns
,
$this
->
projections
);
}
...
...
@@ -292,11 +290,21 @@ class Builder extends BaseBuilder {
$cursor
=
$this
->
collection
->
find
(
$wheres
,
$columns
);
// Apply order, offset, limit and hint
if
(
$this
->
timeout
)
$cursor
->
timeout
(
$this
->
timeout
);
if
(
$this
->
orders
)
$cursor
->
sort
(
$this
->
orders
);
if
(
$this
->
offset
)
$cursor
->
skip
(
$this
->
offset
);
if
(
$this
->
limit
)
$cursor
->
limit
(
$this
->
limit
);
if
(
$this
->
hint
)
$cursor
->
hint
(
$this
->
hint
);
if
(
$this
->
timeout
)
{
$cursor
->
timeout
(
$this
->
timeout
);
}
if
(
$this
->
orders
)
{
$cursor
->
sort
(
$this
->
orders
);
}
if
(
$this
->
offset
)
{
$cursor
->
skip
(
$this
->
offset
);
}
if
(
$this
->
limit
)
{
$cursor
->
limit
(
$this
->
limit
);
}
if
(
$this
->
hint
)
{
$cursor
->
hint
(
$this
->
hint
);
}
// Return results as an array with numeric keys
return
iterator_to_array
(
$cursor
,
false
);
...
...
@@ -341,10 +349,10 @@ class Builder extends BaseBuilder {
// Once we have executed the query, we will reset the aggregate property so
// that more select queries can be executed against the database without
// the aggregate value getting in the way when the grammar builds it.
$this
->
columns
=
null
;
$this
->
aggregate
=
null
;
$this
->
columns
=
null
;
$this
->
aggregate
=
null
;
if
(
isset
(
$results
[
0
]))
{
if
(
isset
(
$results
[
0
]))
{
$result
=
(
array
)
$results
[
0
];
return
$result
[
'aggregate'
];
...
...
@@ -370,8 +378,7 @@ class Builder extends BaseBuilder {
{
$this
->
distinct
=
true
;
if
(
$column
)
{
if
(
$column
)
{
$this
->
columns
=
[
$column
];
}
...
...
@@ -387,17 +394,13 @@ class Builder extends BaseBuilder {
*/
public
function
orderBy
(
$column
,
$direction
=
'asc'
)
{
if
(
is_string
(
$direction
))
{
if
(
is_string
(
$direction
))
{
$direction
=
(
strtolower
(
$direction
)
==
'asc'
?
1
:
-
1
);
}
if
(
$column
==
'natural'
)
{
if
(
$column
==
'natural'
)
{
$this
->
orders
[
'$natural'
]
=
$direction
;
}
else
{
}
else
{
$this
->
orders
[
$column
]
=
$direction
;
}
...
...
@@ -448,17 +451,18 @@ class Builder extends BaseBuilder {
// if the user is inserting a single document or an array of documents.
$batch
=
true
;
foreach
(
$values
as
$value
)
{
foreach
(
$values
as
$value
)
{
// As soon as we find a value that is not an array we assume the user is
// inserting a single document.
if
(
!
is_array
(
$value
))
{
$batch
=
false
;
break
;
if
(
!
is_array
(
$value
))
{
$batch
=
false
;
break
;
}
}
if
(
!
$batch
)
$values
=
[
$values
];
if
(
!
$batch
)
{
$values
=
[
$values
];
}
// Batch insert
$result
=
$this
->
collection
->
batchInsert
(
$values
);
...
...
@@ -477,10 +481,8 @@ class Builder extends BaseBuilder {
{
$result
=
$this
->
collection
->
insert
(
$values
);
if
(
1
==
(
int
)
$result
[
'ok'
])
{
if
(
is_null
(
$sequence
))
{
if
(
1
==
(
int
)
$result
[
'ok'
])
{
if
(
is_null
(
$sequence
))
{
$sequence
=
'_id'
;
}
...
...
@@ -499,8 +501,7 @@ class Builder extends BaseBuilder {
public
function
update
(
array
$values
,
array
$options
=
[])
{
// Use $set as default operator.
if
(
!
starts_with
(
key
(
$values
),
'$'
))
{
if
(
!
starts_with
(
key
(
$values
),
'$'
))
{
$values
=
[
'$set'
=>
$values
];
}
...
...
@@ -519,14 +520,12 @@ class Builder extends BaseBuilder {
{
$query
=
[
'$inc'
=>
[
$column
=>
$amount
]];
if
(
!
empty
(
$extra
))
{
if
(
!
empty
(
$extra
))
{
$query
[
'$set'
]
=
$extra
;
}
// Protect
$this
->
where
(
function
(
$query
)
use
(
$column
)
{
$this
->
where
(
function
(
$query
)
use
(
$column
)
{
$query
->
where
(
$column
,
'exists'
,
false
);
$query
->
orWhereNotNull
(
$column
);
...
...
@@ -581,8 +580,7 @@ class Builder extends BaseBuilder {
$result
=
$this
->
collection
->
remove
(
$wheres
);
if
(
1
==
(
int
)
$result
[
'ok'
])
{
if
(
1
==
(
int
)
$result
[
'ok'
])
{
return
$result
[
'n'
];
}
...
...
@@ -597,8 +595,7 @@ class Builder extends BaseBuilder {
*/
public
function
from
(
$collection
)
{
if
(
$collection
)
{
if
(
$collection
)
{
$this
->
collection
=
$this
->
connection
->
getCollection
(
$collection
);
}
...
...
@@ -624,13 +621,11 @@ class Builder extends BaseBuilder {
*/
public
function
lists
(
$column
,
$key
=
null
)
{
if
(
$key
==
'_id'
)
{
if
(
$key
==
'_id'
)
{
$results
=
new
Collection
(
$this
->
get
([
$column
,
$key
]));
// Convert MongoId's to strings so that lists can do its work.
$results
=
$results
->
map
(
function
(
$item
)
{
$results
=
$results
->
map
(
function
(
$item
)
{
$item
[
'_id'
]
=
(
string
)
$item
[
'_id'
];
return
$item
;
...
...
@@ -651,14 +646,12 @@ class Builder extends BaseBuilder {
public
function
raw
(
$expression
=
null
)
{
// Execute the closure on the mongodb collection
if
(
$expression
instanceof
Closure
)
{
if
(
$expression
instanceof
Closure
)
{
return
call_user_func
(
$expression
,
$this
->
collection
);
}
// Create an expression for the given value
elseif
(
!
is_null
(
$expression
))
{
elseif
(
!
is_null
(
$expression
))
{
return
new
Expression
(
$expression
);
}
...
...
@@ -681,16 +674,11 @@ class Builder extends BaseBuilder {
// Check if we are pushing multiple values.
$batch
=
(
is_array
(
$value
)
and
array_keys
(
$value
)
===
range
(
0
,
count
(
$value
)
-
1
));
if
(
is_array
(
$column
))
{
if
(
is_array
(
$column
))
{
$query
=
[
$operator
=>
$column
];
}
elseif
(
$batch
)
{
}
elseif
(
$batch
)
{
$query
=
[
$operator
=>
[
$column
=>
[
'$each'
=>
$value
]]];
}
else
{
}
else
{
$query
=
[
$operator
=>
[
$column
=>
$value
]];
}
...
...
@@ -712,12 +700,9 @@ class Builder extends BaseBuilder {
// If we are pulling multiple values, we need to use $pullAll.
$operator
=
$batch
?
'$pullAll'
:
'$pull'
;
if
(
is_array
(
$column
))
{
if
(
is_array
(
$column
))
{
$query
=
[
$operator
=>
$column
];
}
else
{
}
else
{
$query
=
[
$operator
=>
[
$column
=>
$value
]];
}
...
...
@@ -732,12 +717,13 @@ class Builder extends BaseBuilder {
*/
public
function
drop
(
$columns
)
{
if
(
!
is_array
(
$columns
))
$columns
=
[
$columns
];
if
(
!
is_array
(
$columns
))
{
$columns
=
[
$columns
];
}
$fields
=
[];
foreach
(
$columns
as
$column
)
{
foreach
(
$columns
as
$column
)
{
$fields
[
$column
]
=
1
;
}
...
...
@@ -766,8 +752,7 @@ class Builder extends BaseBuilder {
protected
function
performUpdate
(
$query
,
array
$options
=
[])
{
// Update multiple items by default.
if
(
!
array_key_exists
(
'multiple'
,
$options
))
{
if
(
!
array_key_exists
(
'multiple'
,
$options
))
{
$options
[
'multiple'
]
=
true
;
}
...
...
@@ -775,8 +760,7 @@ class Builder extends BaseBuilder {
$result
=
$this
->
collection
->
update
(
$wheres
,
$query
,
$options
);
if
(
1
==
(
int
)
$result
[
'ok'
])
{
if
(
1
==
(
int
)
$result
[
'ok'
])
{
return
$result
[
'n'
];
}
...
...
@@ -791,8 +775,7 @@ class Builder extends BaseBuilder {
*/
public
function
convertKey
(
$id
)
{
if
(
MongoId
::
isValid
(
$id
))
{
if
(
MongoId
::
isValid
(
$id
))
{
return
new
MongoId
(
$id
);
}
...
...
@@ -815,12 +798,10 @@ class Builder extends BaseBuilder {
$params
=
func_get_args
();
// Remove the leading $ from operators.
if
(
func_num_args
()
==
3
)
{
if
(
func_num_args
()
==
3
)
{
$operator
=
&
$params
[
1
];
if
(
starts_with
(
$operator
,
'$'
))
{
if
(
starts_with
(
$operator
,
'$'
))
{
$operator
=
substr
(
$operator
,
1
);
}
}
...
...
@@ -841,11 +822,9 @@ class Builder extends BaseBuilder {
// We will add all compiled wheres to this array.
$compiled
=
[];
foreach
(
$wheres
as
$i
=>
&
$where
)
{
foreach
(
$wheres
as
$i
=>
&
$where
)
{
// Make sure the operator is in lowercase.
if
(
isset
(
$where
[
'operator'
]))
{
if
(
isset
(
$where
[
'operator'
]))
{
$where
[
'operator'
]
=
strtolower
(
$where
[
'operator'
]);
// Operator conversions
...
...
@@ -860,42 +839,35 @@ class Builder extends BaseBuilder {
'uniquedocs'
=>
'uniqueDocs'
,
];
if
(
array_key_exists
(
$where
[
'operator'
],
$convert
))
{
if
(
array_key_exists
(
$where
[
'operator'
],
$convert
))
{
$where
[
'operator'
]
=
$convert
[
$where
[
'operator'
]];
}
}
// Convert id's.
if
(
isset
(
$where
[
'column'
])
and
(
$where
[
'column'
]
==
'_id'
or
ends_with
(
$where
[
'column'
],
'._id'
)))
{
if
(
isset
(
$where
[
'column'
])
and
(
$where
[
'column'
]
==
'_id'
or
ends_with
(
$where
[
'column'
],
'._id'
)))
{
// Multiple values.
if
(
isset
(
$where
[
'values'
]))
{
foreach
(
$where
[
'values'
]
as
&
$value
)
{
if
(
isset
(
$where
[
'values'
]))
{
foreach
(
$where
[
'values'
]
as
&
$value
)
{
$value
=
$this
->
convertKey
(
$value
);
}
}
// Single value.
elseif
(
isset
(
$where
[
'value'
]))
{
elseif
(
isset
(
$where
[
'value'
]))
{
$where
[
'value'
]
=
$this
->
convertKey
(
$where
[
'value'
]);
}
}
// Convert DateTime values to MongoDate.
if
(
isset
(
$where
[
'value'
])
and
$where
[
'value'
]
instanceof
DateTime
)
{
if
(
isset
(
$where
[
'value'
])
and
$where
[
'value'
]
instanceof
DateTime
)
{
$where
[
'value'
]
=
new
MongoDate
(
$where
[
'value'
]
->
getTimestamp
());
}
// The next item in a "chain" of wheres devices the boolean of the
// first item. So if we see that there are multiple wheres, we will
// use the operator of the next where.
if
(
$i
==
0
and
count
(
$wheres
)
>
1
and
$where
[
'boolean'
]
==
'and'
)
{
if
(
$i
==
0
and
count
(
$wheres
)
>
1
and
$where
[
'boolean'
]
==
'and'
)
{
$where
[
'boolean'
]
=
$wheres
[
$i
+
1
][
'boolean'
];
}
...
...
@@ -904,15 +876,13 @@ class Builder extends BaseBuilder {
$result
=
$this
->
{
$method
}(
$where
);
// Wrap the where with an $or operator.
if
(
$where
[
'boolean'
]
==
'or'
)
{
if
(
$where
[
'boolean'
]
==
'or'
)
{
$result
=
[
'$or'
=>
[
$result
]];
}
// If there are multiple wheres, we will wrap it with $and. This is needed
// to make nested wheres work.
elseif
(
count
(
$wheres
)
>
1
)
{
elseif
(
count
(
$wheres
)
>
1
)
{
$result
=
[
'$and'
=>
[
$result
]];
}
...
...
@@ -928,47 +898,42 @@ class Builder extends BaseBuilder {
extract
(
$where
);
// Replace like with a MongoRegex instance.
if
(
$operator
==
'like'
)
{
if
(
$operator
==
'like'
)
{
$operator
=
'='
;
// Convert to regular expression.
$regex
=
preg_replace
(
'#(^|[^\\\])%#'
,
'$1.*'
,
preg_quote
(
$value
));
// Convert like to regular expression.
if
(
!
starts_with
(
$value
,
'%'
))
$regex
=
'^'
.
$regex
;
if
(
!
ends_with
(
$value
,
'%'
))
$regex
=
$regex
.
'$'
;
if
(
!
starts_with
(
$value
,
'%'
))
{
$regex
=
'^'
.
$regex
;
}
if
(
!
ends_with
(
$value
,
'%'
))
{
$regex
=
$regex
.
'$'
;
}
$value
=
new
MongoRegex
(
"/
$regex
/i"
);
}
// Manipulate regexp operations.
elseif
(
in_array
(
$operator
,
[
'regexp'
,
'not regexp'
,
'regex'
,
'not regex'
]))
{
elseif
(
in_array
(
$operator
,
[
'regexp'
,
'not regexp'
,
'regex'
,
'not regex'
]))
{
// Automatically convert regular expression strings to MongoRegex objects.
if
(
!
$value
instanceof
MongoRegex
)
{
if
(
!
$value
instanceof
MongoRegex
)
{
$value
=
new
MongoRegex
(
$value
);
}
// For inverse regexp operations, we can just use the $not operator
// and pass it a MongoRegex instence.
if
(
starts_with
(
$operator
,
'not'
))
{
if
(
starts_with
(
$operator
,
'not'
))
{
$operator
=
'not'
;
}
}
if
(
!
isset
(
$operator
)
or
$operator
==
'='
)
{
if
(
!
isset
(
$operator
)
or
$operator
==
'='
)
{
$query
=
[
$column
=>
$value
];
}
elseif
(
array_key_exists
(
$operator
,
$this
->
conversion
))
{
}
elseif
(
array_key_exists
(
$operator
,
$this
->
conversion
))
{
$query
=
[
$column
=>
[
$this
->
conversion
[
$operator
]
=>
$value
]];
}
else
{
}
else
{
$query
=
[
$column
=>
[
'$'
.
$operator
=>
$value
]];
}
...
...
@@ -1016,8 +981,7 @@ class Builder extends BaseBuilder {
{
extract
(
$where
);
if
(
$not
)
{
if
(
$not
)
{
return
[
'$or'
=>
[
[
...
...
@@ -1032,9 +996,7 @@ class Builder extends BaseBuilder {
],
],
];
}
else
{
}
else
{
return
[
$column
=>
[
'$gte'
=>
$values
[
0
],
...
...
@@ -1058,12 +1020,10 @@ class Builder extends BaseBuilder {
*/
public
function
__call
(
$method
,
$parameters
)
{
if
(
$method
==
'unset'
)
{
if
(
$method
==
'unset'
)
{
return
call_user_func_array
([
$this
,
'drop'
],
$parameters
);
}
return
parent
::
__call
(
$method
,
$parameters
);
}
}
src/Jenssegers/Mongodb/Query/Grammar.php
View file @
c16f41cd
...
...
@@ -4,5 +4,4 @@ use Illuminate\Database\Query\Grammars\Grammar as BaseGrammar;
class
Grammar
extends
BaseGrammar
{
}
src/Jenssegers/Mongodb/Query/Processor.php
View file @
c16f41cd
...
...
@@ -2,6 +2,6 @@
use
Illuminate\Database\Query\Processors\Processor
as
BaseProcessor
;
class
Processor
extends
BaseProcessor
{
class
Processor
extends
BaseProcessor
{
}
src/Jenssegers/Mongodb/Relations/BelongsTo.php
View file @
c16f41cd
<?php
namespace
Jenssegers\Mongodb\Relations
;
class
BelongsTo
extends
\Illuminate\Database\Eloquent\Relations\BelongsTo
{
class
BelongsTo
extends
\Illuminate\Database\Eloquent\Relations\BelongsTo
{
/**
* Set the base constraints on the relation query.
*/
public
function
addConstraints
()
{
if
(
static
::
$constraints
)
{
if
(
static
::
$constraints
)
{
// For belongs to relationships, which are essentially the inverse of has one
// or has many relationships, we need to actually query on the primary key
// of the related models matching on the foreign key that's on a parent.
...
...
@@ -30,5 +29,4 @@ class BelongsTo extends \Illuminate\Database\Eloquent\Relations\BelongsTo {
$this
->
query
->
whereIn
(
$key
,
$this
->
getEagerModelKeys
(
$models
));
}
}
src/Jenssegers/Mongodb/Relations/BelongsToMany.php
View file @
c16f41cd
...
...
@@ -4,8 +4,8 @@ use Illuminate\Database\Eloquent\Collection;
use
Illuminate\Database\Eloquent\Model
;
use
Illuminate\Database\Eloquent\Relations\BelongsToMany
as
EloquentBelongsToMany
;
class
BelongsToMany
extends
EloquentBelongsToMany
{
class
BelongsToMany
extends
EloquentBelongsToMany
{
/**
* Hydrate the pivot table relationship on the models.
*
...
...
@@ -32,7 +32,9 @@ class BelongsToMany extends EloquentBelongsToMany {
*/
public
function
addConstraints
()
{
if
(
static
::
$constraints
)
$this
->
setWhere
();
if
(
static
::
$constraints
)
{
$this
->
setWhere
();
}
}
/**
...
...
@@ -101,7 +103,9 @@ class BelongsToMany extends EloquentBelongsToMany {
'attached'
=>
[],
'detached'
=>
[],
'updated'
=>
[],
];
if
(
$ids
instanceof
Collection
)
$ids
=
$ids
->
modelKeys
();
if
(
$ids
instanceof
Collection
)
{
$ids
=
$ids
->
modelKeys
();
}
// First we need to attach any of the associated models that are not currently
// in this joining table. We'll spin through the given IDs, checking to see
...
...
@@ -109,7 +113,9 @@ class BelongsToMany extends EloquentBelongsToMany {
$current
=
$this
->
parent
->
{
$this
->
otherKey
}
?:
[];
// See issue #256.
if
(
$current
instanceof
Collection
)
$current
=
$ids
->
modelKeys
();
if
(
$current
instanceof
Collection
)
{
$current
=
$ids
->
modelKeys
();
}
$records
=
$this
->
formatSyncList
(
$ids
);
...
...
@@ -122,8 +128,7 @@ class BelongsToMany extends EloquentBelongsToMany {
// Next, we will take the differences of the currents and given IDs and detach
// all of the entities that exist in the "current" array but are not in the
// the array of the IDs given to the method which will complete the sync.
if
(
$detaching
and
count
(
$detach
)
>
0
)
{
if
(
$detaching
and
count
(
$detach
)
>
0
)
{
$this
->
detach
(
$detach
);
$changes
[
'detached'
]
=
(
array
)
array_map
(
function
(
$v
)
{
...
...
@@ -138,8 +143,7 @@ class BelongsToMany extends EloquentBelongsToMany {
$changes
,
$this
->
attachNew
(
$records
,
$current
,
false
)
);
if
(
count
(
$changes
[
'attached'
])
||
count
(
$changes
[
'updated'
]))
{
if
(
count
(
$changes
[
'attached'
])
||
count
(
$changes
[
'updated'
]))
{
$this
->
touchIfTouching
();
}
...
...
@@ -167,17 +171,14 @@ class BelongsToMany extends EloquentBelongsToMany {
*/
public
function
attach
(
$id
,
array
$attributes
=
[],
$touch
=
true
)
{
if
(
$id
instanceof
Model
)
{
if
(
$id
instanceof
Model
)
{
$model
=
$id
;
$id
=
$model
->
getKey
();
// Attach the new parent id to the related model.
$model
->
push
(
$this
->
foreignKey
,
$this
->
parent
->
getKey
(),
true
);
}
else
{
}
else
{
$query
=
$this
->
newRelatedQuery
();
$query
->
whereIn
(
$this
->
related
->
getKeyName
(),
(
array
)
$id
);
...
...
@@ -189,7 +190,9 @@ class BelongsToMany extends EloquentBelongsToMany {
// Attach the new ids to the parent model.
$this
->
parent
->
push
(
$this
->
otherKey
,
(
array
)
$id
,
true
);
if
(
$touch
)
$this
->
touchIfTouching
();
if
(
$touch
)
{
$this
->
touchIfTouching
();
}
}
/**
...
...
@@ -201,7 +204,9 @@ class BelongsToMany extends EloquentBelongsToMany {
*/
public
function
detach
(
$ids
=
[],
$touch
=
true
)
{
if
(
$ids
instanceof
Model
)
$ids
=
(
array
)
$ids
->
getKey
();
if
(
$ids
instanceof
Model
)
{
$ids
=
(
array
)
$ids
->
getKey
();
}
$query
=
$this
->
newRelatedQuery
();
...
...
@@ -214,15 +219,16 @@ class BelongsToMany extends EloquentBelongsToMany {
$this
->
parent
->
pull
(
$this
->
otherKey
,
$ids
);
// Prepare the query to select all related objects.
if
(
count
(
$ids
)
>
0
)
{
if
(
count
(
$ids
)
>
0
)
{
$query
->
whereIn
(
$this
->
related
->
getKeyName
(),
$ids
);
}
// Remove the relation to the parent.
$query
->
pull
(
$this
->
foreignKey
,
$this
->
parent
->
getKey
());
if
(
$touch
)
$this
->
touchIfTouching
();
if
(
$touch
)
{
$this
->
touchIfTouching
();
}
return
count
(
$ids
);
}
...
...
@@ -242,10 +248,8 @@ class BelongsToMany extends EloquentBelongsToMany {
// parents without having a possibly slow inner loops for every models.
$dictionary
=
[];
foreach
(
$results
as
$result
)
{
foreach
(
$result
->
$foreign
as
$item
)
{
foreach
(
$results
as
$result
)
{
foreach
(
$result
->
$foreign
as
$item
)
{
$dictionary
[
$item
][]
=
$result
;
}
}
...
...
src/Jenssegers/Mongodb/Relations/EmbedsMany.php
View file @
c16f41cd
...
...
@@ -5,8 +5,8 @@ use Illuminate\Pagination\LengthAwarePaginator;
use
Illuminate\Pagination\Paginator
;
use
MongoId
;
class
EmbedsMany
extends
EmbedsOneOrMany
{
class
EmbedsMany
extends
EmbedsOneOrMany
{
/**
* Get the results of the relationship.
*
...
...
@@ -26,14 +26,12 @@ class EmbedsMany extends EmbedsOneOrMany {
public
function
performInsert
(
Model
$model
)
{
// Generate a new key if needed.
if
(
$model
->
getKeyName
()
==
'_id'
and
!
$model
->
getKey
())
{
if
(
$model
->
getKeyName
()
==
'_id'
and
!
$model
->
getKey
())
{
$model
->
setAttribute
(
'_id'
,
new
MongoId
);
}
// For deeply nested documents, let the parent handle the changes.
if
(
$this
->
isNested
())
{
if
(
$this
->
isNested
())
{
$this
->
associate
(
$model
);
return
$this
->
parent
->
save
();
...
...
@@ -43,7 +41,9 @@ class EmbedsMany extends EmbedsOneOrMany {
$result
=
$this
->
getBaseQuery
()
->
push
(
$this
->
localKey
,
$model
->
getAttributes
(),
true
);
// Attach the model to its parent.
if
(
$result
)
$this
->
associate
(
$model
);
if
(
$result
)
{
$this
->
associate
(
$model
);
}
return
$result
?
$model
:
false
;
}
...
...
@@ -57,8 +57,7 @@ class EmbedsMany extends EmbedsOneOrMany {
public
function
performUpdate
(
Model
$model
)
{
// For deeply nested documents, let the parent handle the changes.
if
(
$this
->
isNested
())
{
if
(
$this
->
isNested
())
{
$this
->
associate
(
$model
);
return
$this
->
parent
->
save
();
...
...
@@ -75,7 +74,9 @@ class EmbedsMany extends EmbedsOneOrMany {
->
update
(
$values
);
// Attach the model to its parent.
if
(
$result
)
$this
->
associate
(
$model
);
if
(
$result
)
{
$this
->
associate
(
$model
);
}
return
$result
?
$model
:
false
;
}
...
...
@@ -89,8 +90,7 @@ class EmbedsMany extends EmbedsOneOrMany {
public
function
performDelete
(
Model
$model
)
{
// For deeply nested documents, let the parent handle the changes.
if
(
$this
->
isNested
())
{
if
(
$this
->
isNested
())
{
$this
->
dissociate
(
$model
);
return
$this
->
parent
->
save
();
...
...
@@ -101,7 +101,9 @@ class EmbedsMany extends EmbedsOneOrMany {
$result
=
$this
->
getBaseQuery
()
->
pull
(
$this
->
localKey
,
[
$model
->
getKeyName
()
=>
$foreignKey
]);
if
(
$result
)
$this
->
dissociate
(
$model
);
if
(
$result
)
{
$this
->
dissociate
(
$model
);
}
return
$result
;
}
...
...
@@ -114,12 +116,9 @@ class EmbedsMany extends EmbedsOneOrMany {
*/
public
function
associate
(
Model
$model
)
{
if
(
!
$this
->
contains
(
$model
))
{
if
(
!
$this
->
contains
(
$model
))
{
return
$this
->
associateNew
(
$model
);
}
else
{
}
else
{
return
$this
->
associateExisting
(
$model
);
}
}
...
...
@@ -139,10 +138,8 @@ class EmbedsMany extends EmbedsOneOrMany {
$primaryKey
=
$this
->
related
->
getKeyName
();
// Remove the document from the parent model.
foreach
(
$records
as
$i
=>
$record
)
{
if
(
in_array
(
$record
[
$primaryKey
],
$ids
))
{
foreach
(
$records
as
$i
=>
$record
)
{
if
(
in_array
(
$record
[
$primaryKey
],
$ids
))
{
unset
(
$records
[
$i
]);
}
}
...
...
@@ -171,9 +168,10 @@ class EmbedsMany extends EmbedsOneOrMany {
$models
=
$this
->
getResults
()
->
only
(
$ids
);
// Pull the documents from the database.
foreach
(
$models
as
$model
)
{
if
(
$model
->
delete
())
$count
++
;
foreach
(
$models
as
$model
)
{
if
(
$model
->
delete
())
{
$count
++
;
}
}
return
$count
;
...
...
@@ -189,7 +187,9 @@ class EmbedsMany extends EmbedsOneOrMany {
// Overwrite the local key with an empty array.
$result
=
$this
->
query
->
update
([
$this
->
localKey
=>
[]]);
if
(
$result
)
$this
->
setEmbedded
([]);
if
(
$result
)
{
$this
->
setEmbedded
([]);
}
return
$result
;
}
...
...
@@ -225,8 +225,7 @@ class EmbedsMany extends EmbedsOneOrMany {
protected
function
associateNew
(
$model
)
{
// Create a new key if needed.
if
(
!
$model
->
getAttribute
(
'_id'
))
{
if
(
!
$model
->
getAttribute
(
'_id'
))
{
$model
->
setAttribute
(
'_id'
,
new
MongoId
);
}
...
...
@@ -254,10 +253,8 @@ class EmbedsMany extends EmbedsOneOrMany {
$key
=
$model
->
getKey
();
// Replace the document in the parent model.
foreach
(
$records
as
&
$record
)
{
if
(
$record
[
$primaryKey
]
==
$key
)
{
foreach
(
$records
as
&
$record
)
{
if
(
$record
[
$primaryKey
]
==
$key
)
{
$record
=
$model
->
getAttributes
();
break
;
}
...
...
@@ -306,7 +303,9 @@ class EmbedsMany extends EmbedsOneOrMany {
*/
protected
function
setEmbedded
(
$models
)
{
if
(
!
is_array
(
$models
))
$models
=
[
$models
];
if
(
!
is_array
(
$models
))
{
$models
=
[
$models
];
}
return
parent
::
setEmbedded
(
array_values
(
$models
));
}
...
...
@@ -321,12 +320,10 @@ class EmbedsMany extends EmbedsOneOrMany {
public
function
__call
(
$method
,
$parameters
)
{
// Collection methods
if
(
method_exists
(
'Illuminate\Database\Eloquent\Collection'
,
$method
))
{
if
(
method_exists
(
'Illuminate\Database\Eloquent\Collection'
,
$method
))
{
return
call_user_func_array
([
$this
->
getResults
(),
$method
],
$parameters
);
}
return
parent
::
__call
(
$method
,
$parameters
);
}
}
src/Jenssegers/Mongodb/Relations/EmbedsOne.php
View file @
c16f41cd
...
...
@@ -3,8 +3,8 @@
use
Illuminate\Database\Eloquent\Model
;
use
MongoId
;
class
EmbedsOne
extends
EmbedsOneOrMany
{
class
EmbedsOne
extends
EmbedsOneOrMany
{
/**
* Get the results of the relationship.
*
...
...
@@ -24,14 +24,12 @@ class EmbedsOne extends EmbedsOneOrMany {
public
function
performInsert
(
Model
$model
)
{
// Generate a new key if needed.
if
(
$model
->
getKeyName
()
==
'_id'
and
!
$model
->
getKey
())
{
if
(
$model
->
getKeyName
()
==
'_id'
and
!
$model
->
getKey
())
{
$model
->
setAttribute
(
'_id'
,
new
MongoId
);
}
// For deeply nested documents, let the parent handle the changes.
if
(
$this
->
isNested
())
{
if
(
$this
->
isNested
())
{
$this
->
associate
(
$model
);
return
$this
->
parent
->
save
();
...
...
@@ -40,7 +38,9 @@ class EmbedsOne extends EmbedsOneOrMany {
$result
=
$this
->
getBaseQuery
()
->
update
([
$this
->
localKey
=>
$model
->
getAttributes
()]);
// Attach the model to its parent.
if
(
$result
)
$this
->
associate
(
$model
);
if
(
$result
)
{
$this
->
associate
(
$model
);
}
return
$result
?
$model
:
false
;
}
...
...
@@ -53,8 +53,7 @@ class EmbedsOne extends EmbedsOneOrMany {
*/
public
function
performUpdate
(
Model
$model
)
{
if
(
$this
->
isNested
())
{
if
(
$this
->
isNested
())
{
$this
->
associate
(
$model
);
return
$this
->
parent
->
save
();
...
...
@@ -66,7 +65,9 @@ class EmbedsOne extends EmbedsOneOrMany {
$result
=
$this
->
getBaseQuery
()
->
update
(
$values
);
// Attach the model to its parent.
if
(
$result
)
$this
->
associate
(
$model
);
if
(
$result
)
{
$this
->
associate
(
$model
);
}
return
$result
?
$model
:
false
;
}
...
...
@@ -80,8 +81,7 @@ class EmbedsOne extends EmbedsOneOrMany {
public
function
performDelete
(
Model
$model
)
{
// For deeply nested documents, let the parent handle the changes.
if
(
$this
->
isNested
())
{
if
(
$this
->
isNested
())
{
$this
->
dissociate
(
$model
);
return
$this
->
parent
->
save
();
...
...
@@ -91,7 +91,9 @@ class EmbedsOne extends EmbedsOneOrMany {
$result
=
$this
->
getBaseQuery
()
->
update
([
$this
->
localKey
=>
null
]);
// Detach the model from its parent.
if
(
$result
)
$this
->
dissociate
();
if
(
$result
)
{
$this
->
dissociate
();
}
return
$result
;
}
...
...
@@ -128,5 +130,4 @@ class EmbedsOne extends EmbedsOneOrMany {
return
$this
->
performDelete
(
$model
);
}
}
src/Jenssegers/Mongodb/Relations/EmbedsOneOrMany.php
View file @
c16f41cd
...
...
@@ -5,8 +5,8 @@ use Illuminate\Database\Eloquent\Collection;
use
Illuminate\Database\Eloquent\Model
;
use
Illuminate\Database\Eloquent\Relations\Relation
;
abstract
class
EmbedsOneOrMany
extends
Relation
{
abstract
class
EmbedsOneOrMany
extends
Relation
{
/**
* The local key of the parent model.
*
...
...
@@ -48,8 +48,7 @@ abstract class EmbedsOneOrMany extends Relation {
$this
->
relation
=
$relation
;
// If this is a nested relation, we need to get the parent query instead.
if
(
$parentRelation
=
$this
->
getParentRelation
())
{
if
(
$parentRelation
=
$this
->
getParentRelation
())
{
$this
->
query
=
$parentRelation
->
getQuery
();
}
...
...
@@ -61,8 +60,7 @@ abstract class EmbedsOneOrMany extends Relation {
*/
public
function
addConstraints
()
{
if
(
static
::
$constraints
)
{
if
(
static
::
$constraints
)
{
$this
->
query
->
where
(
$this
->
getQualifiedParentKeyName
(),
'='
,
$this
->
getParentKey
());
}
}
...
...
@@ -85,8 +83,7 @@ abstract class EmbedsOneOrMany extends Relation {
*/
public
function
initRelation
(
array
$models
,
$relation
)
{
foreach
(
$models
as
$model
)
{
foreach
(
$models
as
$model
)
{
$model
->
setParentRelation
(
$this
);
$model
->
setRelation
(
$relation
,
$this
->
related
->
newCollection
());
...
...
@@ -105,8 +102,7 @@ abstract class EmbedsOneOrMany extends Relation {
*/
public
function
match
(
array
$models
,
Collection
$results
,
$relation
)
{
foreach
(
$models
as
$model
)
{
foreach
(
$models
as
$model
)
{
$results
=
$model
->
$relation
()
->
getResults
();
$model
->
setParentRelation
(
$this
);
...
...
@@ -195,8 +191,7 @@ abstract class EmbedsOneOrMany extends Relation {
{
$instances
=
[];
foreach
(
$records
as
$record
)
{
foreach
(
$records
as
$record
)
{
$instances
[]
=
$this
->
create
(
$record
);
}
...
...
@@ -211,16 +206,18 @@ abstract class EmbedsOneOrMany extends Relation {
*/
protected
function
getIdsArrayFrom
(
$ids
)
{
if
(
$ids
instanceof
\Illuminate\Support\Collection
)
{
if
(
$ids
instanceof
\Illuminate\Support\Collection
)
{
$ids
=
$ids
->
all
();
}
if
(
!
is_array
(
$ids
))
$ids
=
[
$ids
];
if
(
!
is_array
(
$ids
))
{
$ids
=
[
$ids
];
}
foreach
(
$ids
as
&
$id
)
{
if
(
$id
instanceof
Model
)
$id
=
$id
->
getKey
();
foreach
(
$ids
as
&
$id
)
{
if
(
$id
instanceof
Model
)
{
$id
=
$id
->
getKey
();
}
}
return
$ids
;
...
...
@@ -269,8 +266,7 @@ abstract class EmbedsOneOrMany extends Relation {
*/
protected
function
getForeignKeyValue
(
$id
)
{
if
(
$id
instanceof
Model
)
{
if
(
$id
instanceof
Model
)
{
$id
=
$id
->
getKey
();
}
...
...
@@ -288,13 +284,11 @@ abstract class EmbedsOneOrMany extends Relation {
{
$models
=
[];
foreach
(
$records
as
$attributes
)
{
foreach
(
$records
as
$attributes
)
{
$models
[]
=
$this
->
toModel
(
$attributes
);
}
if
(
count
(
$models
)
>
0
)
{
if
(
count
(
$models
)
>
0
)
{
$models
=
$this
->
eagerLoadRelations
(
$models
);
}
...
...
@@ -309,7 +303,9 @@ abstract class EmbedsOneOrMany extends Relation {
*/
protected
function
toModel
(
$attributes
=
[])
{
if
(
is_null
(
$attributes
))
return
;
if
(
is_null
(
$attributes
))
{
return
;
}
$model
=
$this
->
related
->
newFromBuilder
((
array
)
$attributes
);
...
...
@@ -375,8 +371,7 @@ abstract class EmbedsOneOrMany extends Relation {
*/
protected
function
getPathHierarchy
(
$glue
=
'.'
)
{
if
(
$parentRelation
=
$this
->
getParentRelation
())
{
if
(
$parentRelation
=
$this
->
getParentRelation
())
{
return
$parentRelation
->
getPathHierarchy
(
$glue
)
.
$glue
.
$this
->
localKey
;
}
...
...
@@ -390,8 +385,7 @@ abstract class EmbedsOneOrMany extends Relation {
*/
public
function
getQualifiedParentKeyName
()
{
if
(
$parentRelation
=
$this
->
getParentRelation
())
{
if
(
$parentRelation
=
$this
->
getParentRelation
())
{
return
$parentRelation
->
getPathHierarchy
()
.
'.'
.
$this
->
parent
->
getKeyName
();
}
...
...
@@ -407,5 +401,4 @@ abstract class EmbedsOneOrMany extends Relation {
{
return
$this
->
parent
->
getKey
();
}
}
src/Jenssegers/Mongodb/Relations/HasMany.php
View file @
c16f41cd
...
...
@@ -3,8 +3,8 @@
use
Illuminate\Database\Eloquent\Builder
;
use
Illuminate\Database\Eloquent\Relations\HasMany
as
EloquentHasMany
;
class
HasMany
extends
EloquentHasMany
{
class
HasMany
extends
EloquentHasMany
{
/**
* Add the constraints for a relationship query.
*
...
...
@@ -45,5 +45,4 @@ class HasMany extends EloquentHasMany {
{
return
$this
->
getForeignKey
();
}
}
src/Jenssegers/Mongodb/Relations/HasOne.php
View file @
c16f41cd
...
...
@@ -3,8 +3,8 @@
use
Illuminate\Database\Eloquent\Builder
;
use
Illuminate\Database\Eloquent\Relations\HasOne
as
EloquentHasOne
;
class
HasOne
extends
EloquentHasOne
{
class
HasOne
extends
EloquentHasOne
{
/**
* Add the constraints for a relationship query.
*
...
...
@@ -45,5 +45,4 @@ class HasOne extends EloquentHasOne {
{
return
$this
->
getForeignKey
();
}
}
src/Jenssegers/Mongodb/Relations/MorphTo.php
View file @
c16f41cd
...
...
@@ -2,15 +2,14 @@
use
Illuminate\Database\Eloquent\Relations\MorphTo
as
EloquentMorphTo
;
class
MorphTo
extends
EloquentMorphTo
{
class
MorphTo
extends
EloquentMorphTo
{
/**
* Set the base constraints on the relation query.
*/
public
function
addConstraints
()
{
if
(
static
::
$constraints
)
{
if
(
static
::
$constraints
)
{
// For belongs to relationships, which are essentially the inverse of has one
// or has many relationships, we need to actually query on the primary key
// of the related models matching on the foreign key that's on a parent.
...
...
@@ -36,5 +35,4 @@ class MorphTo extends EloquentMorphTo {
return
$query
->
whereIn
(
$key
,
$this
->
gatherKeysByType
(
$type
)
->
all
())
->
get
();
}
}
src/Jenssegers/Mongodb/Schema/Blueprint.php
View file @
c16f41cd
...
...
@@ -3,8 +3,8 @@
use
Closure
;
use
Illuminate\Database\Connection
;
class
Blueprint
extends
\Illuminate\Database\Schema\Blueprint
{
class
Blueprint
extends
\Illuminate\Database\Schema\Blueprint
{
/**
* The MongoConnection object for this blueprint.
*
...
...
@@ -51,13 +51,11 @@ class Blueprint extends \Illuminate\Database\Schema\Blueprint {
$columns
=
$this
->
fluent
(
$columns
);
// Columns are passed as a default array.
if
(
is_array
(
$columns
)
&&
is_int
(
key
(
$columns
)))
{
if
(
is_array
(
$columns
)
&&
is_int
(
key
(
$columns
)))
{
// Transform the columns to the required array format.
$transform
=
[];
foreach
(
$columns
as
$column
)
{
foreach
(
$columns
as
$column
)
{
$transform
[
$column
]
=
1
;
}
...
...
@@ -92,13 +90,11 @@ class Blueprint extends \Illuminate\Database\Schema\Blueprint {
$columns
=
$this
->
fluent
(
$columns
);
// Columns are passed as a default array.
if
(
is_array
(
$columns
)
&&
is_int
(
key
(
$columns
)))
{
if
(
is_array
(
$columns
)
&&
is_int
(
key
(
$columns
)))
{
// Transform the columns to the required array format.
$transform
=
[];
foreach
(
$columns
as
$column
)
{
foreach
(
$columns
as
$column
)
{
$transform
[
$column
]
=
1
;
}
...
...
@@ -226,16 +222,11 @@ class Blueprint extends \Illuminate\Database\Schema\Blueprint {
*/
protected
function
fluent
(
$columns
=
null
)
{
if
(
is_null
(
$columns
))
{
if
(
is_null
(
$columns
))
{
return
$this
->
columns
;
}
elseif
(
is_string
(
$columns
))
{
}
elseif
(
is_string
(
$columns
))
{
return
$this
->
columns
=
[
$columns
];
}
else
{
}
else
{
return
$this
->
columns
=
$columns
;
}
}
...
...
@@ -250,5 +241,4 @@ class Blueprint extends \Illuminate\Database\Schema\Blueprint {
// Dummy.
return
$this
;
}
}
src/Jenssegers/Mongodb/Schema/Builder.php
View file @
c16f41cd
...
...
@@ -3,8 +3,8 @@
use
Closure
;
use
Jenssegers\Mongodb\Connection
;
class
Builder
extends
\Illuminate\Database\Schema\Builder
{
class
Builder
extends
\Illuminate\Database\Schema\Builder
{
/**
* Create a new database Schema manager.
*
...
...
@@ -73,8 +73,7 @@ class Builder extends \Illuminate\Database\Schema\Builder {
{
$blueprint
=
$this
->
createBlueprint
(
$collection
);
if
(
$callback
)
{
if
(
$callback
)
{
$callback
(
$blueprint
);
}
}
...
...
@@ -104,8 +103,7 @@ class Builder extends \Illuminate\Database\Schema\Builder {
$blueprint
->
create
();
if
(
$callback
)
{
if
(
$callback
)
{
$callback
(
$blueprint
);
}
}
...
...
@@ -133,5 +131,4 @@ class Builder extends \Illuminate\Database\Schema\Builder {
{
return
new
Blueprint
(
$this
->
connection
,
$collection
);
}
}
tests/AuthTest.php
View file @
c16f41cd
...
...
@@ -3,7 +3,8 @@
use
Illuminate\Auth\Passwords\PasswordBroker
;
use
Illuminate\Foundation\Application
;
class
AuthTest
extends
TestCase
{
class
AuthTest
extends
TestCase
{
public
function
tearDown
()
{
...
...
@@ -25,8 +26,7 @@ class AuthTest extends TestCase {
public
function
testRemind
()
{
if
(
Application
::
VERSION
>=
'5.2'
)
{
if
(
Application
::
VERSION
>=
'5.2'
)
{
return
;
}
...
...
@@ -58,8 +58,7 @@ class AuthTest extends TestCase {
'token'
=>
$reminder
[
'token'
],
];
$response
=
$broker
->
reset
(
$credentials
,
function
(
$user
,
$password
)
{
$response
=
$broker
->
reset
(
$credentials
,
function
(
$user
,
$password
)
{
$user
->
password
=
bcrypt
(
$password
);
$user
->
save
();
});
...
...
@@ -67,5 +66,4 @@ class AuthTest extends TestCase {
$this
->
assertEquals
(
'passwords.reset'
,
$response
);
$this
->
assertEquals
(
0
,
DB
::
collection
(
'password_resets'
)
->
count
());
}
}
tests/ConnectionTest.php
View file @
c16f41cd
<?php
class
ConnectionTest
extends
TestCase
{
class
ConnectionTest
extends
TestCase
{
public
function
testConnection
()
{
...
...
@@ -129,5 +130,4 @@ class ConnectionTest extends TestCase {
$this
->
setExpectedException
(
'MongoConnectionException'
,
"Failed to connect to: "
.
$hosts
[
0
]
.
": Connection refused; Failed to connect to: "
.
$hosts
[
1
]
.
": Connection refused"
);
$connection
=
DB
::
connection
(
'mongodb'
);
}
}
tests/EmbeddedRelationsTest.php
View file @
c16f41cd
<?php
class
EmbeddedRelationsTest
extends
TestCase
{
class
EmbeddedRelationsTest
extends
TestCase
{
public
function
tearDown
()
{
...
...
@@ -696,5 +697,4 @@ class EmbeddedRelationsTest extends TestCase {
$this
->
assertEquals
(
2
,
$results
->
count
());
$this
->
assertEquals
(
3
,
$results
->
total
());
}
}
tests/ModelTest.php
View file @
c16f41cd
<?php
class
ModelTest
extends
TestCase
{
class
ModelTest
extends
TestCase
{
public
function
tearDown
()
{
...
...
@@ -331,7 +332,8 @@ class ModelTest extends TestCase {
$item
=
Item
::
create
([
'name'
=>
'fork'
,
'type'
=>
'sharp'
]);
$array
=
$item
->
toArray
();
$keys
=
array_keys
(
$array
);
sort
(
$keys
);
$keys
=
array_keys
(
$array
);
sort
(
$keys
);
$this
->
assertEquals
([
'_id'
,
'created_at'
,
'name'
,
'type'
,
'updated_at'
],
$keys
);
$this
->
assertTrue
(
is_string
(
$array
[
'created_at'
]));
$this
->
assertTrue
(
is_string
(
$array
[
'updated_at'
]));
...
...
@@ -449,27 +451,23 @@ class ModelTest extends TestCase {
User
::
create
([
'name'
=>
'Jane Doe'
,
'age'
=>
35
]);
User
::
create
([
'name'
=>
'Harry Hoe'
,
'age'
=>
15
]);
$users
=
User
::
raw
(
function
(
$collection
)
{
$users
=
User
::
raw
(
function
(
$collection
)
{
return
$collection
->
find
([
'age'
=>
35
]);
});
$this
->
assertInstanceOf
(
'Illuminate\Database\Eloquent\Collection'
,
$users
);
$this
->
assertInstanceOf
(
'Jenssegers\Mongodb\Model'
,
$users
[
0
]);
$user
=
User
::
raw
(
function
(
$collection
)
{
$user
=
User
::
raw
(
function
(
$collection
)
{
return
$collection
->
findOne
([
'age'
=>
35
]);
});
$this
->
assertInstanceOf
(
'Jenssegers\Mongodb\Model'
,
$user
);
$count
=
User
::
raw
(
function
(
$collection
)
{
$count
=
User
::
raw
(
function
(
$collection
)
{
return
$collection
->
count
();
});
$this
->
assertEquals
(
3
,
$count
);
$result
=
User
::
raw
(
function
(
$collection
)
{
$result
=
User
::
raw
(
function
(
$collection
)
{
return
$collection
->
insert
([
'name'
=>
'Yvonne Yoe'
,
'age'
=>
35
]);
});
$this
->
assertTrue
(
is_array
(
$result
));
...
...
@@ -499,5 +497,4 @@ class ModelTest extends TestCase {
$user
->
birthday
=
new
DateTime
(
'19 august 1989'
);
$this
->
assertEmpty
(
$user
->
getDirty
());
}
}
tests/MysqlRelationsTest.php
View file @
c16f41cd
<?php
class
MysqlRelationsTest
extends
TestCase
{
class
MysqlRelationsTest
extends
TestCase
{
public
function
setUp
()
{
...
...
tests/QueryBuilderTest.php
View file @
c16f41cd
<?php
class
QueryBuilderTest
extends
TestCase
{
class
QueryBuilderTest
extends
TestCase
{
public
function
tearDown
()
{
...
...
@@ -179,8 +180,7 @@ class QueryBuilderTest extends TestCase {
[
'name'
=>
'John Doe'
,
'age'
=>
25
],
]);
$cursor
=
DB
::
collection
(
'users'
)
->
raw
(
function
(
$collection
)
{
$cursor
=
DB
::
collection
(
'users'
)
->
raw
(
function
(
$collection
)
{
return
$collection
->
find
([
'age'
=>
20
]);
});
...
...
@@ -286,11 +286,13 @@ class QueryBuilderTest extends TestCase {
[
'name'
=>
'spoon'
,
'type'
=>
'round'
],
]);
$items
=
DB
::
collection
(
'items'
)
->
distinct
(
'name'
)
->
get
();
sort
(
$items
);
$items
=
DB
::
collection
(
'items'
)
->
distinct
(
'name'
)
->
get
();
sort
(
$items
);
$this
->
assertEquals
(
3
,
count
(
$items
));
$this
->
assertEquals
([
'fork'
,
'knife'
,
'spoon'
],
$items
);
$types
=
DB
::
collection
(
'items'
)
->
distinct
(
'type'
)
->
get
();
sort
(
$types
);
$types
=
DB
::
collection
(
'items'
)
->
distinct
(
'type'
)
->
get
();
sort
(
$types
);
$this
->
assertEquals
(
2
,
count
(
$types
));
$this
->
assertEquals
([
'round'
,
'sharp'
],
$types
);
}
...
...
@@ -635,10 +637,8 @@ class QueryBuilderTest extends TestCase {
$results
=
DB
::
collection
(
'items'
)
->
project
([
'tags'
=>
[
'$slice'
=>
1
]])
->
get
();
foreach
(
$results
as
$result
)
{
foreach
(
$results
as
$result
)
{
$this
->
assertEquals
(
1
,
count
(
$result
[
'tags'
]));
}
}
}
tests/QueryTest.php
View file @
c16f41cd
<?php
class
QueryTest
extends
TestCase
{
class
QueryTest
extends
TestCase
{
protected
static
$started
=
false
;
...
...
@@ -214,8 +215,7 @@ class QueryTest extends TestCase {
public
function
testSubquery
()
{
$users
=
User
::
where
(
'title'
,
'admin'
)
->
orWhere
(
function
(
$query
)
{
$users
=
User
::
where
(
'title'
,
'admin'
)
->
orWhere
(
function
(
$query
)
{
$query
->
where
(
'name'
,
'Tommy Toe'
)
->
orWhere
(
'name'
,
'Error'
);
})
...
...
@@ -223,8 +223,7 @@ class QueryTest extends TestCase {
$this
->
assertEquals
(
5
,
count
(
$users
));
$users
=
User
::
where
(
'title'
,
'user'
)
->
where
(
function
(
$query
)
{
$users
=
User
::
where
(
'title'
,
'user'
)
->
where
(
function
(
$query
)
{
$query
->
where
(
'age'
,
35
)
->
orWhere
(
'name'
,
'like'
,
'%harry%'
);
})
...
...
@@ -232,8 +231,7 @@ class QueryTest extends TestCase {
$this
->
assertEquals
(
2
,
count
(
$users
));
$users
=
User
::
where
(
'age'
,
35
)
->
orWhere
(
function
(
$query
)
{
$users
=
User
::
where
(
'age'
,
35
)
->
orWhere
(
function
(
$query
)
{
$query
->
where
(
'title'
,
'admin'
)
->
orWhere
(
'name'
,
'Error'
);
})
...
...
@@ -243,8 +241,7 @@ class QueryTest extends TestCase {
$users
=
User
::
whereNull
(
'deleted_at'
)
->
where
(
'title'
,
'admin'
)
->
where
(
function
(
$query
)
{
->
where
(
function
(
$query
)
{
$query
->
where
(
'age'
,
'>'
,
15
)
->
orWhere
(
'name'
,
'Harry Hoe'
);
})
...
...
@@ -253,11 +250,9 @@ class QueryTest extends TestCase {
$this
->
assertEquals
(
3
,
$users
->
count
());
$users
=
User
::
whereNull
(
'deleted_at'
)
->
where
(
function
(
$query
)
{
->
where
(
function
(
$query
)
{
$query
->
where
(
'name'
,
'Harry Hoe'
)
->
orWhere
(
function
(
$query
)
{
->
orWhere
(
function
(
$query
)
{
$query
->
where
(
'age'
,
'>'
,
15
)
->
where
(
'title'
,
'<>'
,
'admin'
);
});
...
...
@@ -283,23 +278,19 @@ class QueryTest extends TestCase {
public
function
testMultipleOr
()
{
$users
=
User
::
where
(
function
(
$query
)
{
$users
=
User
::
where
(
function
(
$query
)
{
$query
->
where
(
'age'
,
35
)
->
orWhere
(
'age'
,
33
);
})
->
where
(
function
(
$query
)
{
->
where
(
function
(
$query
)
{
$query
->
where
(
'name'
,
'John Doe'
)
->
orWhere
(
'name'
,
'Jane Doe'
);
})
->
get
();
$this
->
assertEquals
(
2
,
count
(
$users
));
$users
=
User
::
where
(
function
(
$query
)
{
$users
=
User
::
where
(
function
(
$query
)
{
$query
->
orWhere
(
'age'
,
35
)
->
orWhere
(
'age'
,
33
);
})
->
where
(
function
(
$query
)
{
->
where
(
function
(
$query
)
{
$query
->
orWhere
(
'name'
,
'John Doe'
)
->
orWhere
(
'name'
,
'Jane Doe'
);
})
->
get
();
...
...
@@ -319,5 +310,4 @@ class QueryTest extends TestCase {
$this
->
assertEquals
(
9
,
$results
->
total
());
$this
->
assertEquals
(
1
,
$results
->
currentPage
());
}
}
tests/RelationsTest.php
View file @
c16f41cd
<?php
class
RelationsTest
extends
TestCase
{
class
RelationsTest
extends
TestCase
{
public
function
tearDown
()
{
...
...
@@ -410,15 +411,13 @@ class RelationsTest extends TestCase {
$authors
=
User
::
has
(
'books'
,
'!='
,
0
)
->
get
();
$this
->
assertCount
(
2
,
$authors
);
$authors
=
User
::
whereHas
(
'books'
,
function
(
$query
)
{
$authors
=
User
::
whereHas
(
'books'
,
function
(
$query
)
{
$query
->
where
(
'rating'
,
5
);
})
->
get
();
$this
->
assertCount
(
1
,
$authors
);
$authors
=
User
::
whereHas
(
'books'
,
function
(
$query
)
{
$authors
=
User
::
whereHas
(
'books'
,
function
(
$query
)
{
$query
->
where
(
'rating'
,
'<'
,
5
);
})
->
get
();
...
...
@@ -521,5 +520,4 @@ class RelationsTest extends TestCase {
$this
->
assertEquals
([
$user
->
_id
],
$client
->
user_ids
);
$this
->
assertEquals
([
$client
->
_id
],
$user
->
client_ids
);
}
}
tests/SchemaTest.php
View file @
c16f41cd
<?php
class
SchemaTest
extends
TestCase
{
class
SchemaTest
extends
TestCase
{
public
function
tearDown
()
{
...
...
@@ -18,8 +19,7 @@ class SchemaTest extends TestCase {
{
$instance
=
$this
;
Schema
::
create
(
'newcollection'
,
function
(
$collection
)
use
(
$instance
)
{
Schema
::
create
(
'newcollection'
,
function
(
$collection
)
use
(
$instance
)
{
$instance
->
assertInstanceOf
(
'Jenssegers\Mongodb\Schema\Blueprint'
,
$collection
);
});
...
...
@@ -37,37 +37,32 @@ class SchemaTest extends TestCase {
{
$instance
=
$this
;
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
use
(
$instance
)
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
use
(
$instance
)
{
$instance
->
assertInstanceOf
(
'Jenssegers\Mongodb\Schema\Blueprint'
,
$collection
);
});
Schema
::
table
(
'newcollection'
,
function
(
$collection
)
use
(
$instance
)
{
Schema
::
table
(
'newcollection'
,
function
(
$collection
)
use
(
$instance
)
{
$instance
->
assertInstanceOf
(
'Jenssegers\Mongodb\Schema\Blueprint'
,
$collection
);
});
}
public
function
testIndex
()
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
$collection
->
index
(
'mykey1'
);
});
$index
=
$this
->
getIndex
(
'newcollection'
,
'mykey1'
);
$this
->
assertEquals
(
1
,
$index
[
'key'
][
'mykey1'
]);
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
$collection
->
index
([
'mykey2'
]);
});
$index
=
$this
->
getIndex
(
'newcollection'
,
'mykey2'
);
$this
->
assertEquals
(
1
,
$index
[
'key'
][
'mykey2'
]);
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
$collection
->
string
(
'mykey3'
)
->
index
();
});
...
...
@@ -77,8 +72,7 @@ class SchemaTest extends TestCase {
public
function
testPrimary
()
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
$collection
->
string
(
'mykey'
,
100
)
->
primary
();
});
...
...
@@ -88,8 +82,7 @@ class SchemaTest extends TestCase {
public
function
testUnique
()
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
$collection
->
unique
(
'uniquekey'
);
});
...
...
@@ -99,8 +92,7 @@ class SchemaTest extends TestCase {
public
function
testDropIndex
()
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
$collection
->
unique
(
'uniquekey'
);
$collection
->
dropIndex
(
'uniquekey'
);
});
...
...
@@ -108,8 +100,7 @@ class SchemaTest extends TestCase {
$index
=
$this
->
getIndex
(
'newcollection'
,
'uniquekey'
);
$this
->
assertEquals
(
null
,
$index
);
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
$collection
->
unique
(
'uniquekey'
);
$collection
->
dropIndex
([
'uniquekey'
]);
});
...
...
@@ -120,8 +111,7 @@ class SchemaTest extends TestCase {
public
function
testBackground
()
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
$collection
->
background
(
'backgroundkey'
);
});
...
...
@@ -131,8 +121,7 @@ class SchemaTest extends TestCase {
public
function
testSparse
()
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
$collection
->
sparse
(
'sparsekey'
);
});
...
...
@@ -142,8 +131,7 @@ class SchemaTest extends TestCase {
public
function
testExpire
()
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
$collection
->
expire
(
'expirekey'
,
60
);
});
...
...
@@ -153,13 +141,11 @@ class SchemaTest extends TestCase {
public
function
testSoftDeletes
()
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
$collection
->
softDeletes
();
});
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
$collection
->
string
(
'email'
)
->
nullable
()
->
index
();
});
...
...
@@ -169,8 +155,7 @@ class SchemaTest extends TestCase {
public
function
testFluent
()
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
$collection
->
string
(
'email'
)
->
index
();
$collection
->
string
(
'token'
)
->
index
();
$collection
->
timestamp
(
'created_at'
);
...
...
@@ -185,8 +170,7 @@ class SchemaTest extends TestCase {
public
function
testDummies
()
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
Schema
::
collection
(
'newcollection'
,
function
(
$collection
)
{
$collection
->
boolean
(
'activated'
)
->
default
(
0
);
$collection
->
integer
(
'user_id'
)
->
unsigned
();
});
...
...
@@ -196,12 +180,12 @@ class SchemaTest extends TestCase {
{
$collection
=
DB
::
getCollection
(
$collection
);
foreach
(
$collection
->
getIndexInfo
()
as
$index
)
{
if
(
isset
(
$index
[
'key'
][
$name
]))
return
$index
;
foreach
(
$collection
->
getIndexInfo
()
as
$index
)
{
if
(
isset
(
$index
[
'key'
][
$name
]))
{
return
$index
;
}
}
return
false
;
}
}
tests/SeederTest.php
View file @
c16f41cd
<?php
class
SeederTest
extends
TestCase
{
class
SeederTest
extends
TestCase
{
public
function
tearDown
()
{
...
...
@@ -23,5 +24,4 @@ class SeederTest extends TestCase {
$user
=
User
::
where
(
'name'
,
'John Doe'
)
->
first
();
$this
->
assertTrue
(
$user
->
seed
);
}
}
tests/TestCase.php
View file @
c16f41cd
<?php
class
TestCase
extends
Orchestra\Testbench\TestCase
{
class
TestCase
extends
Orchestra\Testbench\TestCase
{
/**
* Get package providers.
*
...
...
@@ -37,5 +37,4 @@ class TestCase extends Orchestra\Testbench\TestCase {
$app
[
'config'
]
->
set
(
'auth.providers.users.model'
,
'User'
);
$app
[
'config'
]
->
set
(
'cache.driver'
,
'array'
);
}
}
tests/ValidationTest.php
View file @
c16f41cd
<?php
class
ValidationTest
extends
TestCase
{
class
ValidationTest
extends
TestCase
{
public
function
tearDown
()
{
...
...
@@ -23,5 +24,4 @@ class ValidationTest extends TestCase {
);
$this
->
assertTrue
(
$validator
->
fails
());
}
}
tests/models/Address.php
View file @
c16f41cd
...
...
@@ -2,7 +2,8 @@
use
Jenssegers\Mongodb\Model
as
Eloquent
;
class
Address
extends
Eloquent
{
class
Address
extends
Eloquent
{
protected
static
$unguarded
=
true
;
...
...
@@ -10,5 +11,4 @@ class Address extends Eloquent {
{
return
$this
->
embedsMany
(
'Address'
);
}
}
tests/models/Book.php
View file @
c16f41cd
...
...
@@ -2,7 +2,8 @@
use
Jenssegers\Mongodb\Model
as
Eloquent
;
class
Book
extends
Eloquent
{
class
Book
extends
Eloquent
{
protected
$collection
=
'books'
;
protected
static
$unguarded
=
true
;
...
...
tests/models/Client.php
View file @
c16f41cd
...
...
@@ -2,7 +2,8 @@
use
Jenssegers\Mongodb\Model
as
Eloquent
;
class
Client
extends
Eloquent
{
class
Client
extends
Eloquent
{
protected
$collection
=
'clients'
;
protected
static
$unguarded
=
true
;
...
...
tests/models/Group.php
View file @
c16f41cd
...
...
@@ -2,7 +2,8 @@
use
Jenssegers\Mongodb\Model
as
Eloquent
;
class
Group
extends
Eloquent
{
class
Group
extends
Eloquent
{
protected
$collection
=
'groups'
;
protected
static
$unguarded
=
true
;
...
...
tests/models/Item.php
View file @
c16f41cd
...
...
@@ -2,7 +2,8 @@
use
Jenssegers\Mongodb\Model
as
Eloquent
;
class
Item
extends
Eloquent
{
class
Item
extends
Eloquent
{
protected
$collection
=
'items'
;
protected
static
$unguarded
=
true
;
...
...
@@ -16,5 +17,4 @@ class Item extends Eloquent {
{
return
$query
->
where
(
'type'
,
'sharp'
);
}
}
tests/models/MysqlBook.php
View file @
c16f41cd
...
...
@@ -3,7 +3,8 @@
use
\Illuminate\Support\Facades\Schema
;
use
Jenssegers\Eloquent\Model
as
Eloquent
;
class
MysqlBook
extends
Eloquent
{
class
MysqlBook
extends
Eloquent
{
protected
$connection
=
'mysql'
;
protected
$table
=
'books'
;
...
...
@@ -23,15 +24,12 @@ class MysqlBook extends Eloquent {
{
$schema
=
Schema
::
connection
(
'mysql'
);
if
(
!
$schema
->
hasTable
(
'books'
))
{
Schema
::
connection
(
'mysql'
)
->
create
(
'books'
,
function
(
$table
)
{
if
(
!
$schema
->
hasTable
(
'books'
))
{
Schema
::
connection
(
'mysql'
)
->
create
(
'books'
,
function
(
$table
)
{
$table
->
string
(
'title'
);
$table
->
string
(
'author_id'
);
$table
->
timestamps
();
});
}
}
}
tests/models/MysqlRole.php
View file @
c16f41cd
...
...
@@ -3,7 +3,8 @@
use
\Illuminate\Support\Facades\Schema
;
use
Jenssegers\Eloquent\Model
as
Eloquent
;
class
MysqlRole
extends
Eloquent
{
class
MysqlRole
extends
Eloquent
{
protected
$connection
=
'mysql'
;
protected
$table
=
'roles'
;
...
...
@@ -27,15 +28,12 @@ class MysqlRole extends Eloquent {
{
$schema
=
Schema
::
connection
(
'mysql'
);
if
(
!
$schema
->
hasTable
(
'roles'
))
{
Schema
::
connection
(
'mysql'
)
->
create
(
'roles'
,
function
(
$table
)
{
if
(
!
$schema
->
hasTable
(
'roles'
))
{
Schema
::
connection
(
'mysql'
)
->
create
(
'roles'
,
function
(
$table
)
{
$table
->
string
(
'type'
);
$table
->
string
(
'user_id'
);
$table
->
timestamps
();
});
}
}
}
tests/models/MysqlUser.php
View file @
c16f41cd
...
...
@@ -3,7 +3,8 @@
use
\Illuminate\Support\Facades\Schema
;
use
Jenssegers\Eloquent\Model
as
Eloquent
;
class
MysqlUser
extends
Eloquent
{
class
MysqlUser
extends
Eloquent
{
protected
$connection
=
'mysql'
;
protected
$table
=
'users'
;
...
...
@@ -27,15 +28,12 @@ class MysqlUser extends Eloquent {
{
$schema
=
Schema
::
connection
(
'mysql'
);
if
(
!
$schema
->
hasTable
(
'users'
))
{
Schema
::
connection
(
'mysql'
)
->
create
(
'users'
,
function
(
$table
)
{
if
(
!
$schema
->
hasTable
(
'users'
))
{
Schema
::
connection
(
'mysql'
)
->
create
(
'users'
,
function
(
$table
)
{
$table
->
increments
(
'id'
);
$table
->
string
(
'name'
);
$table
->
timestamps
();
});
}
}
}
tests/models/Photo.php
View file @
c16f41cd
...
...
@@ -2,7 +2,8 @@
use
Jenssegers\Mongodb\Model
as
Eloquent
;
class
Photo
extends
Eloquent
{
class
Photo
extends
Eloquent
{
protected
$collection
=
'photos'
;
protected
static
$unguarded
=
true
;
...
...
@@ -11,5 +12,4 @@ class Photo extends Eloquent {
{
return
$this
->
morphTo
();
}
}
tests/models/Role.php
View file @
c16f41cd
...
...
@@ -2,7 +2,8 @@
use
Jenssegers\Mongodb\Model
as
Eloquent
;
class
Role
extends
Eloquent
{
class
Role
extends
Eloquent
{
protected
$collection
=
'roles'
;
protected
static
$unguarded
=
true
;
...
...
@@ -16,5 +17,4 @@ class Role extends Eloquent {
{
return
$this
->
belongsTo
(
'MysqlUser'
);
}
}
tests/models/Soft.php
View file @
c16f41cd
...
...
@@ -3,12 +3,12 @@
use
Jenssegers\Mongodb\Model
as
Eloquent
;
use
Jenssegers\Mongodb\Eloquent\SoftDeletes
;
class
Soft
extends
Eloquent
{
class
Soft
extends
Eloquent
{
use
SoftDeletes
;
protected
$collection
=
'soft'
;
protected
static
$unguarded
=
true
;
protected
$dates
=
[
'deleted_at'
];
}
tests/models/User.php
View file @
c16f41cd
...
...
@@ -6,7 +6,8 @@ use Illuminate\Auth\Passwords\CanResetPassword;
use
Illuminate\Contracts\Auth\Authenticatable
as
AuthenticatableContract
;
use
Illuminate\Contracts\Auth\CanResetPassword
as
CanResetPasswordContract
;
class
User
extends
Eloquent
implements
AuthenticatableContract
,
CanResetPasswordContract
{
class
User
extends
Eloquent
implements
AuthenticatableContract
,
CanResetPasswordContract
{
use
Authenticatable
,
CanResetPassword
;
...
...
tests/seeds/DatabaseSeeder.php
View file @
c16f41cd
...
...
@@ -2,8 +2,8 @@
use
Illuminate\Database\Seeder
;
class
DatabaseSeeder
extends
Seeder
{
class
DatabaseSeeder
extends
Seeder
{
/**
* Run the database seeds.
*
...
...
tests/seeds/UserTableSeeder.php
View file @
c16f41cd
...
...
@@ -3,7 +3,8 @@
use
Illuminate\Database\Seeder
;
use
Illuminate\Support\Facades\DB
;
class
UserTableSeeder
extends
Seeder
{
class
UserTableSeeder
extends
Seeder
{
public
function
run
()
{
...
...
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