|
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