Skip to content

Commit a51ab6c

Browse files
Add document version feature
1 parent 8333880 commit a51ab6c

File tree

3 files changed

+63
-0
lines changed

3 files changed

+63
-0
lines changed

src/Eloquent/HasDocumentVersion.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace MongoDB\Laravel\Eloquent;
6+
7+
trait HasDocumentVersion
8+
{
9+
/**
10+
* Auto call on model instance as booting
11+
*
12+
* @return void
13+
*/
14+
public static function bootHasDocumentVersion(): void
15+
{
16+
static::saving(function ($model) {
17+
$versionKey = static::getDocumentVersionKey();
18+
if (!empty($versionKey)) {
19+
$model->{$versionKey} = defined(static::class.'::DOCUMENT_VERSION')
20+
? (int) static::DOCUMENT_VERSION
21+
: 1;
22+
}
23+
});
24+
}
25+
26+
/**
27+
* Get document version key
28+
*
29+
* @return string
30+
*/
31+
protected static function getDocumentVersionKey(): string
32+
{
33+
return defined(static::class.'::DOCUMENT_VERSION_KEY')
34+
? (string) static::DOCUMENT_VERSION_KEY
35+
: '__v';
36+
}
37+
}

tests/ModelTest.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use MongoDB\Laravel\Connection;
2020
use MongoDB\Laravel\Eloquent\Model;
2121
use MongoDB\Laravel\Tests\Models\Book;
22+
use MongoDB\Laravel\Tests\Models\DocumentVersion;
2223
use MongoDB\Laravel\Tests\Models\Guarded;
2324
use MongoDB\Laravel\Tests\Models\IdIsBinaryUuid;
2425
use MongoDB\Laravel\Tests\Models\IdIsInt;
@@ -53,6 +54,7 @@ public function tearDown(): void
5354
Book::truncate();
5455
Item::truncate();
5556
Guarded::truncate();
57+
DocumentVersion::truncate();
5658
}
5759

5860
public function testNewModel(): void
@@ -1188,6 +1190,12 @@ public function testCreateWithNullId()
11881190
$this->assertSame(1, User::count());
11891191
}
11901192

1193+
public function testDocumentVersion()
1194+
{
1195+
$document = DocumentVersion::create(['name' => 'versionTest']);
1196+
$this->assertEquals(1, $document->__v);
1197+
}
1198+
11911199
/** @param class-string<Model> $modelClass */
11921200
private static function registerModelEvents(string $modelClass, array &$events): void
11931201
{

tests/Models/DocumentVersion.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace MongoDB\Laravel\Tests\Models;
6+
7+
use MongoDB\Laravel\Eloquent\HasDocumentVersion;
8+
use MongoDB\Laravel\Eloquent\Model as Eloquent;
9+
10+
/** @property int __v */
11+
class DocumentVersion extends Eloquent
12+
{
13+
use HasDocumentVersion;
14+
15+
protected $connection = 'mongodb';
16+
protected $collection = 'documentVersion';
17+
protected static $unguarded = true;
18+
}

0 commit comments

Comments
 (0)