Commit 6ffda75b authored by Simon Schaufelberger's avatar Simon Schaufelberger

Merge remote-tracking branch 'upstream/master' into patch-1

parents 3f588096 01ac069c
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true
\ No newline at end of file
...@@ -484,7 +484,7 @@ User::where('name', 'Jaques')->decrement('weight', 50); ...@@ -484,7 +484,7 @@ User::where('name', 'Jaques')->decrement('weight', 50);
The number of updated objects is returned: The number of updated objects is returned:
```php ```php
$count = User->increment('age'); $count = User::increment('age');
``` ```
You may also specify additional columns to update: You may also specify additional columns to update:
......
...@@ -15,31 +15,40 @@ ...@@ -15,31 +15,40 @@
<directory>tests/</directory> <directory>tests/</directory>
</testsuite> </testsuite>
<testsuite name="schema"> <testsuite name="schema">
<directory>tests/SchemaTest.php</directory> <file>tests/SchemaTest.php</file>
</testsuite> </testsuite>
<testsuite name="seeder"> <testsuite name="seeder">
<directory>tests/SeederTest.php</directory> <file>tests/SeederTest.php</file>
</testsuite> </testsuite>
<testsuite name="cache"> <testsuite name="cache">
<directory>tests/CacheTest.php</directory> <file>tests/CacheTest.php</file>
</testsuite> </testsuite>
<testsuite name="builder"> <testsuite name="builder">
<directory>tests/QueryBuilderTest.php</directory> <file>tests/QueryBuilderTest.php</file>
<directory>tests/QueryTest.php</directory> <file>tests/QueryTest.php</file>
</testsuite> </testsuite>
<testsuite name="model"> <testsuite name="model">
<directory>tests/ModelTest.php</directory> <file>tests/ModelTest.php</file>
<directory>tests/RelationsTest.php</directory> <file>tests/RelationsTest.php</file>
</testsuite> </testsuite>
<testsuite name="relations"> <testsuite name="relations">
<directory>tests/RelationsTest.php</directory> <file>tests/RelationsTest.php</file>
<directory>tests/EmbeddedRelationsTest.php</directory> <file>tests/EmbeddedRelationsTest.php</file>
</testsuite> </testsuite>
<testsuite name="mysqlrelations"> <testsuite name="mysqlrelations">
<directory>tests/RelationsTest.php</directory> <file>tests/RelationsTest.php</file>
</testsuite> </testsuite>
<testsuite name="validation"> <testsuite name="validation">
<directory>tests/ValidationTest.php</directory> <file>tests/ValidationTest.php</file>
</testsuite> </testsuite>
</testsuites> </testsuites>
<php>
<env name="MONGO_HOST" value="mongodb"/>
<env name="MONGO_DATABASE" value="unittest"/>
<env name="MONGO_PORT" value="27017"/>
<env name="MYSQL_HOST" value="mysql"/>
<env name="MYSQL_DATABASE" value="unittest"/>
<env name="MYSQL_USERNAME" value="root"/>
<env name="QUEUE_CONNECTION" value="database"/>
</php>
</phpunit> </phpunit>
...@@ -44,7 +44,7 @@ class Builder extends EloquentBuilder ...@@ -44,7 +44,7 @@ class Builder extends EloquentBuilder
return 1; return 1;
} }
return $this->query->update($this->addUpdatedAtColumn($values), $options); return $this->toBase()->update($this->addUpdatedAtColumn($values), $options);
} }
/** /**
......
...@@ -175,7 +175,7 @@ abstract class Model extends BaseModel ...@@ -175,7 +175,7 @@ abstract class Model extends BaseModel
public function setAttribute($key, $value) public function setAttribute($key, $value)
{ {
// Convert _id to ObjectID. // Convert _id to ObjectID.
if (($key == '_id' || Str::endsWith($key, '_id')) && is_string($value)) { if ($key == '_id' && is_string($value)) {
$builder = $this->newBaseQueryBuilder(); $builder = $this->newBaseQueryBuilder();
$value = $builder->convertKey($value); $value = $builder->convertKey($value);
......
...@@ -204,6 +204,16 @@ class Builder extends BaseBuilder ...@@ -204,6 +204,16 @@ class Builder extends BaseBuilder
return $this->where('_id', '=', $this->convertKey($id))->first($columns); return $this->where('_id', '=', $this->convertKey($id))->first($columns);
} }
/**
* @inheritdoc
*/
public function value($column)
{
$result = (array) $this->first([$column]);
return Arr::get($result, $column);
}
/** /**
* @inheritdoc * @inheritdoc
*/ */
...@@ -844,7 +854,7 @@ class Builder extends BaseBuilder ...@@ -844,7 +854,7 @@ class Builder extends BaseBuilder
{ {
if (is_string($id) && strlen($id) === 24 && ctype_xdigit($id)) { if (is_string($id) && strlen($id) === 24 && ctype_xdigit($id)) {
return new ObjectID($id); return new ObjectID($id);
} elseif (strlen($id) === 16 && preg_match('~[^\x20-\x7E\t\r\n]~', $id) > 0) { } elseif (is_string($id) && strlen($id) === 16 && preg_match('~[^\x20-\x7E\t\r\n]~', $id) > 0) {
return new Binary($id, Binary::TYPE_UUID); return new Binary($id, Binary::TYPE_UUID);
} }
...@@ -906,7 +916,7 @@ class Builder extends BaseBuilder ...@@ -906,7 +916,7 @@ class Builder extends BaseBuilder
} }
// Convert id's. // Convert id's.
if (isset($where['column']) && ($where['column'] == '_id' || Str::endsWith($where['column'], '_id'))) { if (isset($where['column']) && ($where['column'] == '_id' || Str::endsWith($where['column'], '._id'))) {
// Multiple values. // Multiple values.
if (isset($where['values'])) { if (isset($where['values'])) {
foreach ($where['values'] as &$value) { foreach ($where['values'] as &$value) {
......
...@@ -701,4 +701,16 @@ class QueryBuilderTest extends TestCase ...@@ -701,4 +701,16 @@ class QueryBuilderTest extends TestCase
$this->assertEquals(1, count($result['tags'])); $this->assertEquals(1, count($result['tags']));
} }
} }
public function testValue()
{
DB::collection('books')->insert([
['title' => 'Moby-Dick', 'author' => ['first_name' => 'Herman', 'last_name' => 'Melville']]
]);
$this->assertEquals('Moby-Dick', DB::collection('books')->value('title'));
$this->assertEquals(['first_name' => 'Herman', 'last_name' => 'Melville'], DB::collection('books')->value('author'));
$this->assertEquals('Herman', DB::collection('books')->value('author.first_name'));
$this->assertEquals('Melville', DB::collection('books')->value('author.last_name'));
}
} }
...@@ -21,6 +21,7 @@ class QueryTest extends TestCase ...@@ -21,6 +21,7 @@ class QueryTest extends TestCase
public function tearDown(): void public function tearDown(): void
{ {
User::truncate(); User::truncate();
Scoped::truncate();
parent::tearDown(); parent::tearDown();
} }
...@@ -309,4 +310,21 @@ class QueryTest extends TestCase ...@@ -309,4 +310,21 @@ class QueryTest extends TestCase
$this->assertEquals(9, $results->total()); $this->assertEquals(9, $results->total());
$this->assertEquals(1, $results->currentPage()); $this->assertEquals(1, $results->currentPage());
} }
public function testUpdate()
{
$this->assertEquals(1, User::where(['name' => 'John Doe'])->update(['name' => 'Jim Morrison']));
$this->assertEquals(1, User::where(['name' => 'Jim Morrison'])->count());
Scoped::create(['favorite' => true]);
Scoped::create(['favorite' => false]);
$this->assertCount(1, Scoped::get());
$this->assertEquals(1, Scoped::query()->update(['name' => 'Johnny']));
$this->assertCount(1, Scoped::withoutGlobalScopes()->where(['name' => 'Johnny'])->get());
$this->assertCount(2, Scoped::withoutGlobalScopes()->get());
$this->assertEquals(2, Scoped::withoutGlobalScopes()->update(['name' => 'Jimmy']));
$this->assertCount(2, Scoped::withoutGlobalScopes()->where(['name' => 'Jimmy'])->get());
}
} }
...@@ -24,6 +24,7 @@ class QueueTest extends TestCase ...@@ -24,6 +24,7 @@ class QueueTest extends TestCase
'displayName' => 'test', 'displayName' => 'test',
'job' => 'test', 'job' => 'test',
'maxTries' => null, 'maxTries' => null,
'delay' => null,
'timeout' => null, 'timeout' => null,
'data' => ['action' => 'QueueJobLifeCycle'], 'data' => ['action' => 'QueueJobLifeCycle'],
]), $job->getRawBody()); ]), $job->getRawBody());
......
<?php <?php
$mongoHost = env('MONGO_HOST', 'mongodb');
$mongoPort = env('MONGO_PORT') ? (int) env('MONGO_PORT') : 27017;
return [ return [
'connections' => [ 'connections' => [
...@@ -7,21 +10,21 @@ return [ ...@@ -7,21 +10,21 @@ return [
'mongodb' => [ 'mongodb' => [
'name' => 'mongodb', 'name' => 'mongodb',
'driver' => 'mongodb', 'driver' => 'mongodb',
'host' => 'mongodb', 'host' => $mongoHost,
'database' => 'unittest', 'database' => env('MONGO_DATABASE', 'unittest'),
], ],
'dsn_mongodb' => [ 'dsn_mongodb' => [
'driver' => 'mongodb', 'driver' => 'mongodb',
'dsn' => 'mongodb://mongodb:27017', 'dsn' => "mongodb://$mongoHost:$mongoPort",
'database' => 'unittest', 'database' => env('MONGO_DATABASE', 'unittest'),
], ],
'mysql' => [ 'mysql' => [
'driver' => 'mysql', 'driver' => 'mysql',
'host' => 'mysql', 'host' => env('MYSQL_HOST', 'mysql'),
'database' => 'unittest', 'database' => env('MYSQL_DATABASE', 'unittest'),
'username' => 'root', 'username' => env('MYSQL_USERNAME', 'root'),
'password' => '', 'password' => '',
'charset' => 'utf8', 'charset' => 'utf8',
'collation' => 'utf8_unicode_ci', 'collation' => 'utf8_unicode_ci',
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
return [ return [
'default' => 'database', 'default' => env('QUEUE_CONNECTION'),
'connections' => [ 'connections' => [
...@@ -16,7 +16,7 @@ return [ ...@@ -16,7 +16,7 @@ return [
], ],
'failed' => [ 'failed' => [
'database' => 'mongodb', 'database' => env('MONGO_DATABASE'),
'table' => 'failed_jobs', 'table' => 'failed_jobs',
], ],
......
<?php
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
use Jenssegers\Mongodb\Eloquent\Builder;
class Scoped extends Eloquent
{
protected $connection = 'mongodb';
protected $collection = 'scoped';
protected $fillable = ['name', 'favorite'];
protected static function boot()
{
parent::boot();
static::addGlobalScope('favorite', function (Builder $builder) {
$builder->where('favorite', true);
});
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment