Skip to content

Commit 95551ca

Browse files
authored
Merge branch 'master' into master
2 parents 4f84a52 + 4a7f5c1 commit 95551ca

File tree

5 files changed

+224
-15
lines changed

5 files changed

+224
-15
lines changed

README.md

+19-7
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ This package adds functionalities to the Eloquent model and Query builder for Mo
4242
- [Cross-Database Relationships](#cross-database-relationships)
4343
- [Authentication](#authentication)
4444
- [Queues](#queues)
45+
- [Laravel specific](#laravel-specific)
46+
- [Lumen specific](#Lumen-specific)
4547
- [Upgrading](#upgrading)
4648
- [Upgrading from version 2 to 3](#upgrading-from-version-2-to-3)
4749

@@ -1067,6 +1069,8 @@ If you want to use MongoDB as your database backend, change the driver in `confi
10671069
'connections' => [
10681070
'database' => [
10691071
'driver' => 'mongodb',
1072+
// You can also specify your jobs specific database created on config/database.php
1073+
'connection' => 'mongodb-job',
10701074
'table' => 'jobs',
10711075
'queue' => 'default',
10721076
'expire' => 60,
@@ -1078,23 +1082,31 @@ If you want to use MongoDB to handle failed jobs, change the database in `config
10781082

10791083
```php
10801084
'failed' => [
1081-
'driver' => env('QUEUE_FAILED_DRIVER', 'database'),
1082-
'database' => env('DB_CONNECTION', 'mongodb'),
1085+
'driver' => 'mongodb',
1086+
// You can also specify your jobs specific database created on config/database.php
1087+
'database' => 'mongodb-job',
10831088
'table' => 'failed_jobs',
10841089
],
10851090
```
10861091

1087-
Or simply set your own `QUEUE_FAILED_DRIVER` environment variable to `mongodb`
1088-
```env
1089-
QUEUE_FAILED_DRIVER=mongodb
1090-
```
1092+
#### Laravel specific
10911093

1092-
Last, add the service provider in `config/app.php`:
1094+
Add the service provider in `config/app.php`:
10931095

10941096
```php
10951097
Jenssegers\Mongodb\MongodbQueueServiceProvider::class,
10961098
```
10971099

1100+
#### Lumen specific
1101+
1102+
With [Lumen](http://lumen.laravel.com), add the service provider in `bootstrap/app.php`. You must however ensure that you add the following **after** the `MongodbServiceProvider` registration.
1103+
1104+
```php
1105+
$app->make('queue');
1106+
1107+
$app->register(Jenssegers\Mongodb\MongodbQueueServiceProvider::class);
1108+
```
1109+
10981110
Upgrading
10991111
---------
11001112

src/Jenssegers/Mongodb/Eloquent/Model.php

+7-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,13 @@ protected function asDateTime($value)
9999
{
100100
// Convert UTCDateTime instances.
101101
if ($value instanceof UTCDateTime) {
102-
return Date::createFromTimestampMs($value->toDateTime()->format('Uv'));
102+
$date = $value->toDateTime();
103+
104+
$seconds = $date->format('U');
105+
$milliseconds = abs($date->format('v'));
106+
$timestampMs = sprintf('%d%03d', $seconds, $milliseconds);
107+
108+
return Date::createFromTimestampMs($timestampMs);
103109
}
104110

105111
return parent::asDateTime($value);

tests/ModelTest.php

+142-3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
use Carbon\Carbon;
55
use Illuminate\Database\Eloquent\Collection as EloquentCollection;
66
use Illuminate\Database\Eloquent\ModelNotFoundException;
7+
use Illuminate\Support\Facades\Date;
78
use Jenssegers\Mongodb\Collection;
89
use Jenssegers\Mongodb\Connection;
910
use Jenssegers\Mongodb\Eloquent\Model;
@@ -385,8 +386,13 @@ public function testUnset(): void
385386

386387
public function testDates(): void
387388
{
388-
$birthday = new DateTime('1980/1/1');
389-
$user = User::create(['name' => 'John Doe', 'birthday' => $birthday]);
389+
$user = User::create(['name' => 'John Doe', 'birthday' => new DateTime('1965/1/1')]);
390+
$this->assertInstanceOf(Carbon::class, $user->birthday);
391+
392+
$user = User::where('birthday', '<', new DateTime('1968/1/1'))->first();
393+
$this->assertEquals('John Doe', $user->name);
394+
395+
$user = User::create(['name' => 'John Doe', 'birthday' => new DateTime('1980/1/1')]);
390396
$this->assertInstanceOf(Carbon::class, $user->birthday);
391397

392398
$check = User::find($user->_id);
@@ -416,19 +422,152 @@ public function testDates(): void
416422
$this->assertEquals($item->created_at->format('Y-m-d H:i:s'), $json['created_at']);
417423

418424
/** @var User $user */
425+
//Test with create and standard property
419426
$user = User::create(['name' => 'Jane Doe', 'birthday' => time()]);
420427
$this->assertInstanceOf(Carbon::class, $user->birthday);
421428

429+
$user = User::create(['name' => 'Jane Doe', 'birthday' => Date::now()]);
430+
$this->assertInstanceOf(Carbon::class, $user->birthday);
431+
422432
$user = User::create(['name' => 'Jane Doe', 'birthday' => 'Monday 8th of August 2005 03:12:46 PM']);
423433
$this->assertInstanceOf(Carbon::class, $user->birthday);
424434

435+
$user = User::create(['name' => 'Jane Doe', 'birthday' => 'Monday 8th of August 1960 03:12:46 PM']);
436+
$this->assertInstanceOf(Carbon::class, $user->birthday);
437+
425438
$user = User::create(['name' => 'Jane Doe', 'birthday' => '2005-08-08']);
426439
$this->assertInstanceOf(Carbon::class, $user->birthday);
427440

441+
$user = User::create(['name' => 'Jane Doe', 'birthday' => '1965-08-08']);
442+
$this->assertInstanceOf(Carbon::class, $user->birthday);
443+
444+
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('2010-08-08')]);
445+
$this->assertInstanceOf(Carbon::class, $user->birthday);
446+
447+
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('1965-08-08')]);
448+
$this->assertInstanceOf(Carbon::class, $user->birthday);
449+
450+
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('2010-08-08 04.08.37')]);
451+
$this->assertInstanceOf(Carbon::class, $user->birthday);
452+
453+
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('1965-08-08 04.08.37')]);
454+
$this->assertInstanceOf(Carbon::class, $user->birthday);
455+
456+
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('2010-08-08 04.08.37.324')]);
457+
$this->assertInstanceOf(Carbon::class, $user->birthday);
458+
459+
$user = User::create(['name' => 'Jane Doe', 'birthday' => new DateTime('1965-08-08 04.08.37.324')]);
460+
$this->assertInstanceOf(Carbon::class, $user->birthday);
461+
462+
//Test with setAttribute and standard property
463+
$user->setAttribute('birthday', time());
464+
$this->assertInstanceOf(Carbon::class, $user->birthday);
465+
466+
$user->setAttribute('birthday', Date::now());
467+
$this->assertInstanceOf(Carbon::class, $user->birthday);
468+
469+
$user->setAttribute('birthday', 'Monday 8th of August 2005 03:12:46 PM');
470+
$this->assertInstanceOf(Carbon::class, $user->birthday);
471+
472+
$user->setAttribute('birthday', 'Monday 8th of August 1960 03:12:46 PM');
473+
$this->assertInstanceOf(Carbon::class, $user->birthday);
474+
475+
$user->setAttribute('birthday', '2005-08-08');
476+
$this->assertInstanceOf(Carbon::class, $user->birthday);
477+
478+
$user->setAttribute('birthday', '1965-08-08');
479+
$this->assertInstanceOf(Carbon::class, $user->birthday);
480+
481+
$user->setAttribute('birthday', new DateTime('2010-08-08'));
482+
$this->assertInstanceOf(Carbon::class, $user->birthday);
483+
484+
$user->setAttribute('birthday', new DateTime('1965-08-08'));
485+
$this->assertInstanceOf(Carbon::class, $user->birthday);
486+
487+
$user->setAttribute('birthday', new DateTime('2010-08-08 04.08.37'));
488+
$this->assertInstanceOf(Carbon::class, $user->birthday);
489+
490+
$user->setAttribute('birthday', new DateTime('1965-08-08 04.08.37'));
491+
$this->assertInstanceOf(Carbon::class, $user->birthday);
492+
493+
$user->setAttribute('birthday', new DateTime('2010-08-08 04.08.37.324'));
494+
$this->assertInstanceOf(Carbon::class, $user->birthday);
495+
496+
$user->setAttribute('birthday', new DateTime('1965-08-08 04.08.37.324'));
497+
$this->assertInstanceOf(Carbon::class, $user->birthday);
498+
499+
//Test with create and array property
500+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => time()]]);
501+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
502+
503+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => Date::now()]]);
504+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
505+
506+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => 'Monday 8th of August 2005 03:12:46 PM']]);
507+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
508+
509+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => 'Monday 8th of August 1960 03:12:46 PM']]);
510+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
511+
428512
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => '2005-08-08']]);
429513
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
430514

431-
$user->setAttribute('entry.date', new DateTime);
515+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => '1965-08-08']]);
516+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
517+
518+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('2010-08-08')]]);
519+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
520+
521+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('1965-08-08')]]);
522+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
523+
524+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('2010-08-08 04.08.37')]]);
525+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
526+
527+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('1965-08-08 04.08.37')]]);
528+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
529+
530+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('2010-08-08 04.08.37.324')]]);
531+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
532+
533+
$user = User::create(['name' => 'Jane Doe', 'entry' => ['date' => new DateTime('1965-08-08 04.08.37.324')]]);
534+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
535+
536+
//Test with setAttribute and array property
537+
$user->setAttribute('entry.date', time());
538+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
539+
540+
$user->setAttribute('entry.date', Date::now());
541+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
542+
543+
$user->setAttribute('entry.date', 'Monday 8th of August 2005 03:12:46 PM');
544+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
545+
546+
$user->setAttribute('entry.date', 'Monday 8th of August 1960 03:12:46 PM');
547+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
548+
549+
$user->setAttribute('entry.date', '2005-08-08');
550+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
551+
552+
$user->setAttribute('entry.date', '1965-08-08');
553+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
554+
555+
$user->setAttribute('entry.date', new DateTime('2010-08-08'));
556+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
557+
558+
$user->setAttribute('entry.date', new DateTime('1965-08-08'));
559+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
560+
561+
$user->setAttribute('entry.date', new DateTime('2010-08-08 04.08.37'));
562+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
563+
564+
$user->setAttribute('entry.date', new DateTime('1965-08-08 04.08.37'));
565+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
566+
567+
$user->setAttribute('entry.date', new DateTime('2010-08-08 04.08.37.324'));
568+
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
569+
570+
$user->setAttribute('entry.date', new DateTime('1965-08-08 04.08.37.324'));
432571
$this->assertInstanceOf(Carbon::class, $user->getAttribute('entry.date'));
433572

434573
$data = $user->toArray();

tests/QueryBuilderTest.php

+9-4
Original file line numberDiff line numberDiff line change
@@ -549,21 +549,26 @@ public function testDates()
549549
{
550550
DB::collection('users')->insert([
551551
['name' => 'John Doe', 'birthday' => new UTCDateTime(Date::parse("1980-01-01 00:00:00")->format('Uv'))],
552-
['name' => 'Jane Doe', 'birthday' => new UTCDateTime(Date::parse("1981-01-01 00:00:00")->format('Uv'))],
553552
['name' => 'Robert Roe', 'birthday' => new UTCDateTime(Date::parse("1982-01-01 00:00:00")->format('Uv'))],
554-
['name' => 'Mark Moe', 'birthday' => new UTCDateTime(Date::parse("1983-01-01 00:00:00")->format('Uv'))],
553+
['name' => 'Mark Moe', 'birthday' => new UTCDateTime(Date::parse("1983-01-01 00:00:00.1")->format('Uv'))],
554+
['name' => 'Frank White', 'birthday' => new UTCDateTime(Date::parse("1960-01-01 12:12:12.1")->format('Uv'))]
555555
]);
556556

557557
$user = DB::collection('users')
558558
->where('birthday', new UTCDateTime(Date::parse("1980-01-01 00:00:00")->format('Uv')))
559559
->first();
560560
$this->assertEquals('John Doe', $user['name']);
561561

562+
$user = DB::collection('users')
563+
->where('birthday', new UTCDateTime(Date::parse("1960-01-01 12:12:12.1")->format('Uv')))
564+
->first();
565+
$this->assertEquals('Frank White', $user['name']);
566+
562567
$user = DB::collection('users')->where('birthday', '=', new DateTime("1980-01-01 00:00:00"))->first();
563568
$this->assertEquals('John Doe', $user['name']);
564569

565-
$start = new UTCDateTime(1000 * strtotime("1981-01-01 00:00:00"));
566-
$stop = new UTCDateTime(1000 * strtotime("1982-01-01 00:00:00"));
570+
$start = new UTCDateTime(1000 * strtotime("1950-01-01 00:00:00"));
571+
$stop = new UTCDateTime(1000 * strtotime("1981-01-01 00:00:00"));
567572

568573
$users = DB::collection('users')->whereBetween('birthday', [$start, $stop])->get();
569574
$this->assertCount(2, $users);

tests/QueryTest.php

+47
Original file line numberDiff line numberDiff line change
@@ -352,4 +352,51 @@ public function testUpdate(): void
352352
$this->assertEquals(2, Scoped::withoutGlobalScopes()->update(['name' => 'Jimmy']));
353353
$this->assertCount(2, Scoped::withoutGlobalScopes()->where(['name' => 'Jimmy'])->get());
354354
}
355+
356+
public function testUnsorted(): void
357+
{
358+
$unsortedResults = User::get();
359+
360+
$unsortedSubset = $unsortedResults->where('age', 35)->values();
361+
362+
$this->assertEquals('John Doe', $unsortedSubset[0]->name);
363+
$this->assertEquals('Brett Boe', $unsortedSubset[1]->name);
364+
$this->assertEquals('Yvonne Yoe', $unsortedSubset[2]->name);
365+
}
366+
367+
public function testSort(): void
368+
{
369+
$results = User::orderBy('age')->get();
370+
371+
$this->assertEquals($results->sortBy('age')->pluck('age')->all(), $results->pluck('age')->all());
372+
}
373+
374+
public function testSortOrder(): void
375+
{
376+
$results = User::orderBy('age', 'desc')->get();
377+
378+
$this->assertEquals($results->sortByDesc('age')->pluck('age')->all(), $results->pluck('age')->all());
379+
}
380+
381+
public function testMultipleSort(): void
382+
{
383+
$results = User::orderBy('age')->orderBy('name')->get();
384+
385+
$subset = $results->where('age', 35)->values();
386+
387+
$this->assertEquals('Brett Boe', $subset[0]->name);
388+
$this->assertEquals('John Doe', $subset[1]->name);
389+
$this->assertEquals('Yvonne Yoe', $subset[2]->name);
390+
}
391+
392+
public function testMultipleSortOrder(): void
393+
{
394+
$results = User::orderBy('age')->orderBy('name', 'desc')->get();
395+
396+
$subset = $results->where('age', 35)->values();
397+
398+
$this->assertEquals('Yvonne Yoe', $subset[0]->name);
399+
$this->assertEquals('John Doe', $subset[1]->name);
400+
$this->assertEquals('Brett Boe', $subset[2]->name);
401+
}
355402
}

0 commit comments

Comments
 (0)