File tree Expand file tree Collapse file tree 2 files changed +52
-0
lines changed Expand file tree Collapse file tree 2 files changed +52
-0
lines changed Original file line number Diff line number Diff line change 9
9
use MongoDB \Laravel \Connection ;
10
10
11
11
use function array_flip ;
12
+ use function array_merge ;
12
13
use function implode ;
13
14
use function in_array ;
14
15
use function is_array ;
@@ -117,6 +118,24 @@ public function hasIndex($indexOrColumns = null)
117
118
return false ;
118
119
}
119
120
121
+ public function jsonSchema (
122
+ array $ schema = [],
123
+ ?string $ validationLevel = null ,
124
+ ?string $ validationAction = null ,
125
+ ): void {
126
+ $ options = array_merge (
127
+ [
128
+ 'validator ' => [
129
+ '$jsonSchema ' => $ schema ,
130
+ ],
131
+ ],
132
+ $ validationLevel ? ['validationLevel ' => $ validationLevel ] : [],
133
+ $ validationAction ? ['validationAction ' => $ validationAction ] : [],
134
+ );
135
+
136
+ $ this ->connection ->getDatabase ()->modifyCollection ($ this ->collection ->getCollectionName (), $ options );
137
+ }
138
+
120
139
/**
121
140
* @param string|array $indexOrColumns
122
141
*
Original file line number Diff line number Diff line change @@ -63,6 +63,39 @@ public function testCreateWithOptions(): void
63
63
$ this ->assertEquals (1024 , $ collection ['options ' ]['size ' ]);
64
64
}
65
65
66
+ public function testCreateWithSchemaValidator (): void
67
+ {
68
+ $ schema = [
69
+ 'bsonType ' => 'object ' ,
70
+ 'required ' => [ 'username ' ],
71
+ 'properties ' => [
72
+ 'username ' => [
73
+ 'bsonType ' => 'string ' ,
74
+ 'description ' => 'must be a string and is required ' ,
75
+ ],
76
+ ],
77
+ ];
78
+
79
+ Schema::create (self ::COLL_2 , function (Blueprint $ collection ) use ($ schema ) {
80
+ $ collection ->string ('username ' );
81
+ $ collection ->jsonSchema (schema: $ schema , validationAction: 'warn ' );
82
+ });
83
+
84
+ $ this ->assertTrue (Schema::hasCollection (self ::COLL_2 ));
85
+ $ this ->assertTrue (Schema::hasTable (self ::COLL_2 ));
86
+
87
+ $ collection = Schema::getCollection (self ::COLL_2 );
88
+ $ this ->assertEquals (
89
+ ['$jsonSchema ' => $ schema ],
90
+ $ collection ['options ' ]['validator ' ],
91
+ );
92
+
93
+ $ this ->assertEquals (
94
+ 'warn ' ,
95
+ $ collection ['options ' ]['validationAction ' ],
96
+ );
97
+ }
98
+
66
99
public function testDrop (): void
67
100
{
68
101
Schema::create (self ::COLL_1 );
You can’t perform that action at this time.
0 commit comments