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 99use MongoDB \Laravel \Connection ;
1010
1111use function array_flip ;
12+ use function array_merge ;
1213use function implode ;
1314use function in_array ;
1415use function is_array ;
@@ -117,6 +118,24 @@ public function hasIndex($indexOrColumns = null)
117118 return false ;
118119 }
119120
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+
120139 /**
121140 * @param string|array $indexOrColumns
122141 *
Original file line number Diff line number Diff line change @@ -63,6 +63,39 @@ public function testCreateWithOptions(): void
6363 $ this ->assertEquals (1024 , $ collection ['options ' ]['size ' ]);
6464 }
6565
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+
6699 public function testDrop (): void
67100 {
68101 Schema::create (self ::COLL_1 );
You can’t perform that action at this time.
0 commit comments