|
8 | 8 | use Illuminate\Support\Facades\DB; |
9 | 9 | use MongoDB\Laravel\Tests\Models\Book; |
10 | 10 | use MongoDB\Laravel\Tests\Models\Role; |
| 11 | +use MongoDB\Laravel\Tests\Models\Skill; |
11 | 12 | use MongoDB\Laravel\Tests\Models\SqlBook; |
12 | 13 | use MongoDB\Laravel\Tests\Models\SqlRole; |
13 | 14 | use MongoDB\Laravel\Tests\Models\SqlUser; |
@@ -36,6 +37,7 @@ public function tearDown(): void |
36 | 37 | SqlUser::truncate(); |
37 | 38 | SqlBook::truncate(); |
38 | 39 | SqlRole::truncate(); |
| 40 | + Skill::truncate(); |
39 | 41 | } |
40 | 42 |
|
41 | 43 | public function testSqlRelations() |
@@ -210,4 +212,53 @@ public function testHybridWith() |
210 | 212 | $this->assertEquals($user->id, $user->books->count()); |
211 | 213 | }); |
212 | 214 | } |
| 215 | + |
| 216 | + public function testHybridBelongsToMany() |
| 217 | + { |
| 218 | + $user = new SqlUser(); |
| 219 | + $user2 = new SqlUser(); |
| 220 | + $this->assertInstanceOf(SqlUser::class, $user); |
| 221 | + $this->assertInstanceOf(SQLiteConnection::class, $user->getConnection()); |
| 222 | + $this->assertInstanceOf(SqlUser::class, $user2); |
| 223 | + $this->assertInstanceOf(SQLiteConnection::class, $user2->getConnection()); |
| 224 | + |
| 225 | + // Create Mysql Users |
| 226 | + $user->fill(['name' => 'John Doe'])->save(); |
| 227 | + $user = SqlUser::query()->find($user->id); |
| 228 | + |
| 229 | + $user2->fill(['name' => 'Maria Doe'])->save(); |
| 230 | + $user2 = SqlUser::query()->find($user2->id); |
| 231 | + |
| 232 | + // Create Mongodb Skills |
| 233 | + $skill = Skill::query()->create(['name' => 'Laravel']); |
| 234 | + $skill2 = Skill::query()->create(['name' => 'MongoDB']); |
| 235 | + |
| 236 | + // sync (pivot is empty) |
| 237 | + $skill->sqlUsers()->sync([$user->id, $user2->id]); |
| 238 | + $check = Skill::query()->find($skill->_id); |
| 239 | + $this->assertEquals(2, $check->sqlUsers->count()); |
| 240 | + |
| 241 | + // sync (pivot is not empty) |
| 242 | + $skill->sqlUsers()->sync($user); |
| 243 | + $check = Skill::query()->find($skill->_id); |
| 244 | + $this->assertEquals(1, $check->sqlUsers->count()); |
| 245 | + |
| 246 | + // Inverse sync (pivot is empty) |
| 247 | + $user->skills()->sync([$skill->_id, $skill2->_id]); |
| 248 | + $check = SqlUser::find($user->id); |
| 249 | + $this->assertEquals(2, $check->skills->count()); |
| 250 | + |
| 251 | + // Inverse sync (pivot is not empty) |
| 252 | + $user->skills()->sync($skill); |
| 253 | + $check = SqlUser::find($user->id); |
| 254 | + $this->assertEquals(1, $check->skills->count()); |
| 255 | + |
| 256 | + // Inverse attach |
| 257 | + $user->skills()->sync([]); |
| 258 | + $check = SqlUser::find($user->id); |
| 259 | + $this->assertEquals(0, $check->skills->count()); |
| 260 | + $user->skills()->attach($skill); |
| 261 | + $check = SqlUser::find($user->id); |
| 262 | + $this->assertEquals(1, $check->skills->count()); |
| 263 | + } |
213 | 264 | } |
0 commit comments