Unverified Commit 6121afab authored by Divine's avatar Divine Committed by GitHub

Merge branch 'master' into fix_failed_job_exception

parents e3057522 6b291d74
...@@ -5,6 +5,7 @@ namespace Jenssegers\Mongodb\Auth; ...@@ -5,6 +5,7 @@ namespace Jenssegers\Mongodb\Auth;
use DateTime; use DateTime;
use DateTimeZone; use DateTimeZone;
use Illuminate\Auth\Passwords\DatabaseTokenRepository as BaseDatabaseTokenRepository; use Illuminate\Auth\Passwords\DatabaseTokenRepository as BaseDatabaseTokenRepository;
use Illuminate\Support\Facades\Date;
use MongoDB\BSON\UTCDateTime; use MongoDB\BSON\UTCDateTime;
class DatabaseTokenRepository extends BaseDatabaseTokenRepository class DatabaseTokenRepository extends BaseDatabaseTokenRepository
...@@ -17,7 +18,7 @@ class DatabaseTokenRepository extends BaseDatabaseTokenRepository ...@@ -17,7 +18,7 @@ class DatabaseTokenRepository extends BaseDatabaseTokenRepository
return [ return [
'email' => $email, 'email' => $email,
'token' => $this->hasher->make($token), 'token' => $this->hasher->make($token),
'created_at' => new UTCDateTime(time() * 1000), 'created_at' => new UTCDateTime(Date::now()->format('Uv')),
]; ];
} }
...@@ -37,7 +38,7 @@ class DatabaseTokenRepository extends BaseDatabaseTokenRepository ...@@ -37,7 +38,7 @@ class DatabaseTokenRepository extends BaseDatabaseTokenRepository
protected function tokenRecentlyCreated($createdAt) protected function tokenRecentlyCreated($createdAt)
{ {
$createdAt = $this->convertDateTime($createdAt); $createdAt = $this->convertDateTime($createdAt);
return parent::tokenRecentlyCreated($createdAt); return parent::tokenRecentlyCreated($createdAt);
} }
......
...@@ -2,13 +2,13 @@ ...@@ -2,13 +2,13 @@
namespace Jenssegers\Mongodb\Eloquent; namespace Jenssegers\Mongodb\Eloquent;
use Illuminate\Support\Carbon;
use DateTime; use DateTime;
use Illuminate\Contracts\Queue\QueueableCollection; use Illuminate\Contracts\Queue\QueueableCollection;
use Illuminate\Contracts\Queue\QueueableEntity; use Illuminate\Contracts\Queue\QueueableEntity;
use Illuminate\Database\Eloquent\Model as BaseModel; use Illuminate\Database\Eloquent\Model as BaseModel;
use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Support\Arr; use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Date;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Jenssegers\Mongodb\Query\Builder as QueryBuilder; use Jenssegers\Mongodb\Query\Builder as QueryBuilder;
use MongoDB\BSON\Binary; use MongoDB\BSON\Binary;
...@@ -89,7 +89,7 @@ abstract class Model extends BaseModel ...@@ -89,7 +89,7 @@ abstract class Model extends BaseModel
$value = parent::asDateTime($value); $value = parent::asDateTime($value);
} }
return new UTCDateTime($value->getTimestamp() * 1000); return new UTCDateTime($value->format('Uv'));
} }
/** /**
...@@ -99,7 +99,7 @@ abstract class Model extends BaseModel ...@@ -99,7 +99,7 @@ abstract class Model extends BaseModel
{ {
// Convert UTCDateTime instances. // Convert UTCDateTime instances.
if ($value instanceof UTCDateTime) { if ($value instanceof UTCDateTime) {
return Carbon::createFromTimestamp($value->toDateTime()->getTimestamp()); return Date::createFromTimestampMs($value->toDateTime()->format('Uv'));
} }
return parent::asDateTime($value); return parent::asDateTime($value);
...@@ -118,7 +118,7 @@ abstract class Model extends BaseModel ...@@ -118,7 +118,7 @@ abstract class Model extends BaseModel
*/ */
public function freshTimestamp() public function freshTimestamp()
{ {
return new UTCDateTime(Carbon::now()); return new UTCDateTime(Date::now()->format('Uv'));
} }
/** /**
......
...@@ -294,7 +294,7 @@ class Builder extends BaseBuilder ...@@ -294,7 +294,7 @@ class Builder extends BaseBuilder
} }
} }
} }
// The _id field is mandatory when using grouping. // The _id field is mandatory when using grouping.
if ($group && empty($group['_id'])) { if ($group && empty($group['_id'])) {
$group['_id'] = null; $group['_id'] = null;
...@@ -930,18 +930,18 @@ class Builder extends BaseBuilder ...@@ -930,18 +930,18 @@ class Builder extends BaseBuilder
if (is_array($where['value'])) { if (is_array($where['value'])) {
array_walk_recursive($where['value'], function (&$item, $key) { array_walk_recursive($where['value'], function (&$item, $key) {
if ($item instanceof DateTime) { if ($item instanceof DateTime) {
$item = new UTCDateTime($item->getTimestamp() * 1000); $item = new UTCDateTime($item->format('Uv'));
} }
}); });
} else { } else {
if ($where['value'] instanceof DateTime) { if ($where['value'] instanceof DateTime) {
$where['value'] = new UTCDateTime($where['value']->getTimestamp() * 1000); $where['value'] = new UTCDateTime($where['value']->format('Uv'));
} }
} }
} elseif (isset($where['values'])) { } elseif (isset($where['values'])) {
array_walk_recursive($where['values'], function (&$item, $key) { array_walk_recursive($where['values'], function (&$item, $key) {
if ($item instanceof DateTime) { if ($item instanceof DateTime) {
$item = new UTCDateTime($item->getTimestamp() * 1000); $item = new UTCDateTime($item->format('Uv'));
} }
}); });
} }
......
...@@ -234,16 +234,18 @@ class Blueprint extends \Illuminate\Database\Schema\Blueprint ...@@ -234,16 +234,18 @@ class Blueprint extends \Illuminate\Database\Schema\Blueprint
} }
/** /**
* @inheritdoc * Indicate that the collection needs to be created.
* @param array $options
* @return void
*/ */
public function create() public function create($options = [])
{ {
$collection = $this->collection->getCollectionName(); $collection = $this->collection->getCollectionName();
$db = $this->connection->getMongoDB(); $db = $this->connection->getMongoDB();
// Ensure the collection is created. // Ensure the collection is created.
$db->createCollection($collection); $db->createCollection($collection, $options);
} }
/** /**
......
...@@ -33,20 +33,20 @@ class Builder extends \Illuminate\Database\Schema\Builder ...@@ -33,20 +33,20 @@ class Builder extends \Illuminate\Database\Schema\Builder
/** /**
* Determine if the given collection exists. * Determine if the given collection exists.
* @param string $collection * @param string $name
* @return bool * @return bool
*/ */
public function hasCollection($collection) public function hasCollection($name)
{ {
$db = $this->connection->getMongoDB(); $db = $this->connection->getMongoDB();
foreach ($db->listCollections() as $collectionFromMongo) { $collections = iterator_to_array($db->listCollections([
if ($collectionFromMongo->getName() == $collection) { 'filter' => [
return true; 'name' => $name,
} ],
} ]), false);
return false; return count($collections) ? true : false;
} }
/** /**
...@@ -134,6 +134,24 @@ class Builder extends \Illuminate\Database\Schema\Builder ...@@ -134,6 +134,24 @@ class Builder extends \Illuminate\Database\Schema\Builder
return new Blueprint($this->connection, $collection); return new Blueprint($this->connection, $collection);
} }
/**
* Get collection.
* @param string $name
* @return bool|\MongoDB\Model\CollectionInfo
*/
public function getCollection($name)
{
$db = $this->connection->getMongoDB();
$collections = iterator_to_array($db->listCollections([
'filter' => [
'name' => $name,
],
]), false);
return count($collections) ? current($collections) : false;
}
/** /**
* Get all of the collections names for the database. * Get all of the collections names for the database.
* @return array * @return array
......
<?php <?php
declare(strict_types=1); declare(strict_types=1);
use Illuminate\Support\Facades\Date;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Jenssegers\Mongodb\Collection; use Jenssegers\Mongodb\Collection;
use Jenssegers\Mongodb\Query\Builder; use Jenssegers\Mongodb\Query\Builder;
...@@ -545,14 +546,14 @@ class QueryBuilderTest extends TestCase ...@@ -545,14 +546,14 @@ class QueryBuilderTest extends TestCase
public function testDates() public function testDates()
{ {
DB::collection('users')->insert([ DB::collection('users')->insert([
['name' => 'John Doe', 'birthday' => new UTCDateTime(1000 * strtotime("1980-01-01 00:00:00"))], ['name' => 'John Doe', 'birthday' => new UTCDateTime(Date::parse("1980-01-01 00:00:00")->format('Uv'))],
['name' => 'Jane Doe', 'birthday' => new UTCDateTime(1000 * strtotime("1981-01-01 00:00:00"))], ['name' => 'Jane Doe', 'birthday' => new UTCDateTime(Date::parse("1981-01-01 00:00:00")->format('Uv'))],
['name' => 'Robert Roe', 'birthday' => new UTCDateTime(1000 * strtotime("1982-01-01 00:00:00"))], ['name' => 'Robert Roe', 'birthday' => new UTCDateTime(Date::parse("1982-01-01 00:00:00")->format('Uv'))],
['name' => 'Mark Moe', 'birthday' => new UTCDateTime(1000 * strtotime("1983-01-01 00:00:00"))], ['name' => 'Mark Moe', 'birthday' => new UTCDateTime(Date::parse("1983-01-01 00:00:00")->format('Uv'))],
]); ]);
$user = DB::collection('users') $user = DB::collection('users')
->where('birthday', new UTCDateTime(1000 * strtotime("1980-01-01 00:00:00"))) ->where('birthday', new UTCDateTime(Date::parse("1980-01-01 00:00:00")->format('Uv')))
->first(); ->first();
$this->assertEquals('John Doe', $user['name']); $this->assertEquals('John Doe', $user['name']);
......
...@@ -34,6 +34,10 @@ class SchemaTest extends TestCase ...@@ -34,6 +34,10 @@ class SchemaTest extends TestCase
Schema::create('newcollection_two', null, ['capped' => true, 'size' => 1024]); Schema::create('newcollection_two', null, ['capped' => true, 'size' => 1024]);
$this->assertTrue(Schema::hasCollection('newcollection_two')); $this->assertTrue(Schema::hasCollection('newcollection_two'));
$this->assertTrue(Schema::hasTable('newcollection_two')); $this->assertTrue(Schema::hasTable('newcollection_two'));
$collection = Schema::getCollection('newcollection_two');
$this->assertTrue($collection['options']['capped']);
$this->assertEquals(1024, $collection['options']['size']);
} }
public function testDrop(): void public function testDrop(): void
......
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