6
6
7
7
use Illuminate \Database \Eloquent \Collection ;
8
8
use Mockery ;
9
+ use MongoDB \BSON \ObjectId ;
9
10
use MongoDB \Laravel \Tests \Models \Address ;
10
11
use MongoDB \Laravel \Tests \Models \Book ;
11
12
use MongoDB \Laravel \Tests \Models \Client ;
13
+ use MongoDB \Laravel \Tests \Models \Experience ;
12
14
use MongoDB \Laravel \Tests \Models \Group ;
13
15
use MongoDB \Laravel \Tests \Models \Item ;
14
16
use MongoDB \Laravel \Tests \Models \Photo ;
15
17
use MongoDB \Laravel \Tests \Models \Role ;
18
+ use MongoDB \Laravel \Tests \Models \Skill ;
16
19
use MongoDB \Laravel \Tests \Models \Soft ;
17
20
use MongoDB \Laravel \Tests \Models \User ;
18
21
@@ -30,6 +33,8 @@ public function tearDown(): void
30
33
Role::truncate ();
31
34
Group::truncate ();
32
35
Photo::truncate ();
36
+ Skill::truncate ();
37
+ Experience::truncate ();
33
38
}
34
39
35
40
public function testHasMany (): void
@@ -255,36 +260,6 @@ public function testBelongsToMany(): void
255
260
$ this ->assertCount (1 , $ client ->users );
256
261
}
257
262
258
- public function testSyncBelongsToMany ()
259
- {
260
- $ user = User::create (['name ' => 'John Doe ' ]);
261
-
262
- $ first = Client::query ()->create (['name ' => 'Hans ' ]);
263
- $ second = Client::query ()->create (['name ' => 'Thomas ' ]);
264
-
265
- $ user ->load ('clients ' );
266
- self ::assertEmpty ($ user ->clients );
267
-
268
- $ user ->clients ()->sync ($ first );
269
-
270
- $ user ->load ('clients ' );
271
- self ::assertCount (1 , $ user ->clients );
272
- self ::assertTrue ($ user ->clients ->first ()->is ($ first ));
273
-
274
- $ user ->clients ()->sync ($ second );
275
-
276
- $ user ->load ('clients ' );
277
- self ::assertCount (1 , $ user ->clients );
278
- self ::assertTrue ($ user ->clients ->first ()->is ($ second ));
279
-
280
- $ user ->clients ()->syncWithoutDetaching ($ first );
281
-
282
- $ user ->load ('clients ' );
283
- self ::assertCount (2 , $ user ->clients );
284
- self ::assertTrue ($ user ->clients ->first ()->is ($ first ));
285
- self ::assertTrue ($ user ->clients ->last ()->is ($ second ));
286
- }
287
-
288
263
public function testBelongsToManyAttachesExistingModels (): void
289
264
{
290
265
$ user = User::create (['name ' => 'John Doe ' , 'client_ids ' => ['1234523 ' ]]);
@@ -327,20 +302,27 @@ public function testBelongsToManyAttachesExistingModels(): void
327
302
public function testBelongsToManySync (): void
328
303
{
329
304
// create test instances
330
- $ user = User::create (['name ' => 'John Doe ' ]);
331
- $ client1 = Client::create (['name ' => 'Pork Pies Ltd. ' ])-> _id ;
332
- $ client2 = Client::create (['name ' => 'Buffet Bar Inc. ' ])-> _id ;
305
+ $ user = User::create (['name ' => 'Hans Thomas ' ]);
306
+ $ client1 = Client::create (['name ' => 'Pork Pies Ltd. ' ]);
307
+ $ client2 = Client::create (['name ' => 'Buffet Bar Inc. ' ]);
333
308
334
309
// Sync multiple
335
- $ user ->clients ()->sync ([$ client1 , $ client2 ]);
310
+ $ user ->clients ()->sync ([$ client1-> _id , $ client2-> _id ]);
336
311
$ this ->assertCount (2 , $ user ->clients );
337
312
338
- // Refresh user
339
- $ user = User::where ('name ' , '= ' , 'John Doe ' )->first ();
313
+ // Sync single wrapped by an array
314
+ $ user ->clients ()->sync ([$ client1 ->_id ]);
315
+ $ user ->load ('clients ' );
316
+
317
+ $ this ->assertCount (1 , $ user ->clients );
318
+ self ::assertTrue ($ user ->clients ->first ()->is ($ client1 ));
319
+
320
+ // Sync single model
321
+ $ user ->clients ()->sync ($ client2 );
322
+ $ user ->load ('clients ' );
340
323
341
- // Sync single
342
- $ user ->clients ()->sync ([$ client1 ]);
343
324
$ this ->assertCount (1 , $ user ->clients );
325
+ self ::assertTrue ($ user ->clients ->first ()->is ($ client2 ));
344
326
}
345
327
346
328
public function testBelongsToManyAttachArray (): void
@@ -366,6 +348,50 @@ public function testBelongsToManyAttachEloquentCollection(): void
366
348
$ this ->assertCount (2 , $ user ->clients );
367
349
}
368
350
351
+ public function testBelongsToManySyncEloquentCollectionWithCustomRelatedKey (): void
352
+ {
353
+ $ experience = Experience::create (['years ' => '5 ' ]);
354
+ $ skill1 = Skill::create (['cskill_id ' => (string ) (new ObjectId ()), 'name ' => 'PHP ' ]);
355
+ $ skill2 = Skill::create (['cskill_id ' => (string ) (new ObjectId ()), 'name ' => 'Laravel ' ]);
356
+ $ collection = new Collection ([$ skill1 , $ skill2 ]);
357
+
358
+ $ experience = Experience::query ()->find ($ experience ->id );
359
+ $ experience ->skillsWithCustomRelatedKey ()->sync ($ collection );
360
+ $ this ->assertCount (2 , $ experience ->skillsWithCustomRelatedKey );
361
+
362
+ self ::assertIsString ($ skill1 ->cskill_id );
363
+ self ::assertContains ($ skill1 ->cskill_id , $ experience ->skillsWithCustomRelatedKey ->pluck ('cskill_id ' ));
364
+
365
+ self ::assertIsString ($ skill2 ->cskill_id );
366
+ self ::assertContains ($ skill2 ->cskill_id , $ experience ->skillsWithCustomRelatedKey ->pluck ('cskill_id ' ));
367
+
368
+ $ skill1 ->refresh ();
369
+ self ::assertIsString ($ skill1 ->_id );
370
+ self ::assertNotContains ($ skill1 ->_id , $ experience ->skillsWithCustomRelatedKey ->pluck ('cskill_id ' ));
371
+
372
+ $ skill2 ->refresh ();
373
+ self ::assertIsString ($ skill2 ->_id );
374
+ self ::assertNotContains ($ skill2 ->_id , $ experience ->skillsWithCustomRelatedKey ->pluck ('cskill_id ' ));
375
+ }
376
+
377
+ public function testBelongsToManySyncEloquentCollectionWithCustomParentKey (): void
378
+ {
379
+ $ experience = Experience::create (['cexperience_id ' => (string ) (new ObjectId ()), 'years ' => '5 ' ]);
380
+ $ skill1 = Skill::create (['name ' => 'PHP ' ]);
381
+ $ skill2 = Skill::create (['name ' => 'Laravel ' ]);
382
+ $ collection = new Collection ([$ skill1 , $ skill2 ]);
383
+
384
+ $ experience = Experience::query ()->find ($ experience ->id );
385
+ $ experience ->skillsWithCustomParentKey ()->sync ($ collection );
386
+ $ this ->assertCount (2 , $ experience ->skillsWithCustomParentKey );
387
+
388
+ self ::assertIsString ($ skill1 ->_id );
389
+ self ::assertContains ($ skill1 ->_id , $ experience ->skillsWithCustomParentKey ->pluck ('_id ' ));
390
+
391
+ self ::assertIsString ($ skill2 ->_id );
392
+ self ::assertContains ($ skill2 ->_id , $ experience ->skillsWithCustomParentKey ->pluck ('_id ' ));
393
+ }
394
+
369
395
public function testBelongsToManySyncAlreadyPresent (): void
370
396
{
371
397
$ user = User::create (['name ' => 'John Doe ' ]);
0 commit comments