|  | 
| 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