10
10
use MongoDB \Laravel \Tests \Models \Address ;
11
11
use MongoDB \Laravel \Tests \Models \Book ;
12
12
use MongoDB \Laravel \Tests \Models \Client ;
13
- use MongoDB \Laravel \Tests \Models \Experience ;
14
13
use MongoDB \Laravel \Tests \Models \Group ;
15
14
use MongoDB \Laravel \Tests \Models \Item ;
16
15
use MongoDB \Laravel \Tests \Models \Label ;
@@ -36,7 +35,6 @@ public function tearDown(): void
36
35
Photo::truncate ();
37
36
Label::truncate ();
38
37
Skill::truncate ();
39
- Experience::truncate ();
40
38
}
41
39
42
40
public function testHasMany (): void
@@ -350,48 +348,226 @@ public function testBelongsToManyAttachEloquentCollection(): void
350
348
$ this ->assertCount (2 , $ user ->clients );
351
349
}
352
350
353
- public function testBelongsToManySyncEloquentCollectionWithCustomRelatedKey (): void
351
+ public function testBelongsToManySyncWithCustomKeys (): void
354
352
{
355
- $ experience = Experience::create (['years ' => '5 ' ]);
353
+ $ client = Client::create (['cclient_id ' => (string ) (new ObjectId ()), '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
+
357
+ $ client = Client::query ()->find ($ client ->_id );
358
+ $ client ->skillsWithCustomKeys ()->sync ([$ skill1 ->cskill_id , $ skill2 ->cskill_id ]);
359
+ $ this ->assertCount (2 , $ client ->skillsWithCustomKeys );
360
+
361
+ self ::assertIsString ($ skill1 ->cskill_id );
362
+ self ::assertContains ($ skill1 ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
363
+ self ::assertNotContains ($ skill1 ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
364
+
365
+ self ::assertIsString ($ skill2 ->cskill_id );
366
+ self ::assertContains ($ skill2 ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
367
+ self ::assertNotContains ($ skill2 ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
368
+
369
+ $ check = Skill::query ()->find ($ skill1 ->_id );
370
+ self ::assertIsString ($ check ->cskill_id );
371
+ self ::assertContains ($ check ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
372
+ self ::assertNotContains ($ check ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
373
+
374
+ $ check = Skill::query ()->find ($ skill2 ->_id );
375
+ self ::assertIsString ($ check ->cskill_id );
376
+ self ::assertContains ($ check ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
377
+ self ::assertNotContains ($ check ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
378
+ }
379
+
380
+ public function testBelongsToManySyncModelWithCustomKeys (): void
381
+ {
382
+ $ client = Client::create (['cclient_id ' => (string ) (new ObjectId ()), 'years ' => '5 ' ]);
383
+ $ skill1 = Skill::create (['cskill_id ' => (string ) (new ObjectId ()), 'name ' => 'PHP ' ]);
384
+
385
+ $ client = Client::query ()->find ($ client ->_id );
386
+ $ client ->skillsWithCustomKeys ()->sync ($ skill1 );
387
+ $ this ->assertCount (1 , $ client ->skillsWithCustomKeys );
388
+
389
+ self ::assertIsString ($ skill1 ->cskill_id );
390
+ self ::assertContains ($ skill1 ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
391
+ self ::assertNotContains ($ skill1 ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
392
+
393
+ $ check = Skill::query ()->find ($ skill1 ->_id );
394
+ self ::assertIsString ($ check ->_id );
395
+ self ::assertContains ($ check ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
396
+ self ::assertNotContains ($ check ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
397
+ }
398
+
399
+ public function testBelongsToManySyncEloquentCollectionWithCustomKeys (): void
400
+ {
401
+ $ client = Client::create (['cclient_id ' => (string ) (new ObjectId ()), 'years ' => '5 ' ]);
356
402
$ skill1 = Skill::create (['cskill_id ' => (string ) (new ObjectId ()), 'name ' => 'PHP ' ]);
357
403
$ skill2 = Skill::create (['cskill_id ' => (string ) (new ObjectId ()), 'name ' => 'Laravel ' ]);
358
404
$ collection = new Collection ([$ skill1 , $ skill2 ]);
359
405
360
- $ experience = Experience ::query ()->find ($ experience -> id );
361
- $ experience -> skillsWithCustomRelatedKey ()->sync ($ collection );
362
- $ this ->assertCount (2 , $ experience -> skillsWithCustomRelatedKey );
406
+ $ client = Client ::query ()->find ($ client -> _id );
407
+ $ client -> skillsWithCustomKeys ()->sync ($ collection );
408
+ $ this ->assertCount (2 , $ client -> skillsWithCustomKeys );
363
409
364
410
self ::assertIsString ($ skill1 ->cskill_id );
365
- self ::assertContains ($ skill1 ->cskill_id , $ experience ->skillsWithCustomRelatedKey ->pluck ('cskill_id ' ));
411
+ self ::assertContains ($ skill1 ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
412
+ self ::assertNotContains ($ skill1 ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
366
413
367
414
self ::assertIsString ($ skill2 ->cskill_id );
368
- self ::assertContains ($ skill2 ->cskill_id , $ experience ->skillsWithCustomRelatedKey ->pluck ('cskill_id ' ));
415
+ self ::assertContains ($ skill2 ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
416
+ self ::assertNotContains ($ skill2 ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
417
+
418
+ $ check = Skill::query ()->find ($ skill1 ->_id );
419
+ self ::assertIsString ($ check ->cskill_id );
420
+ self ::assertContains ($ check ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
421
+ self ::assertNotContains ($ check ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
422
+
423
+ $ check = Skill::query ()->find ($ skill2 ->_id );
424
+ self ::assertIsString ($ check ->cskill_id );
425
+ self ::assertContains ($ check ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
426
+ self ::assertNotContains ($ check ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
427
+ }
428
+
429
+ public function testBelongsToManyAttachWithCustomKeys (): void
430
+ {
431
+ $ client = Client::create (['cclient_id ' => (string ) (new ObjectId ()), 'years ' => '5 ' ]);
432
+ $ skill1 = Skill::create (['cskill_id ' => (string ) (new ObjectId ()), 'name ' => 'PHP ' ]);
433
+ $ skill2 = Skill::create (['cskill_id ' => (string ) (new ObjectId ()), 'name ' => 'Laravel ' ]);
434
+
435
+ $ client = Client::query ()->find ($ client ->_id );
436
+ $ client ->skillsWithCustomKeys ()->attach ([$ skill1 ->cskill_id , $ skill2 ->cskill_id ]);
437
+ $ this ->assertCount (2 , $ client ->skillsWithCustomKeys );
438
+
439
+ self ::assertIsString ($ skill1 ->cskill_id );
440
+ self ::assertContains ($ skill1 ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
441
+ self ::assertNotContains ($ skill1 ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
442
+
443
+ self ::assertIsString ($ skill2 ->cskill_id );
444
+ self ::assertContains ($ skill2 ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
445
+ self ::assertNotContains ($ skill2 ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
446
+
447
+ $ check = Skill::query ()->find ($ skill1 ->_id );
448
+ self ::assertIsString ($ check ->cskill_id );
449
+ self ::assertContains ($ check ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
450
+ self ::assertNotContains ($ check ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
451
+
452
+ $ check = Skill::query ()->find ($ skill2 ->_id );
453
+ self ::assertIsString ($ check ->cskill_id );
454
+ self ::assertContains ($ check ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
455
+ self ::assertNotContains ($ check ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
456
+ }
457
+
458
+ public function testBelongsToManyAttachModelWithCustomKeys (): void
459
+ {
460
+ $ client = Client::create (['cclient_id ' => (string ) (new ObjectId ()), 'years ' => '5 ' ]);
461
+ $ skill1 = Skill::create (['cskill_id ' => (string ) (new ObjectId ()), 'name ' => 'PHP ' ]);
369
462
370
- $ skill1 ->refresh ();
371
- self ::assertIsString ($ skill1 ->_id );
372
- self ::assertNotContains ($ skill1 ->_id , $ experience ->skillsWithCustomRelatedKey ->pluck ('cskill_id ' ));
463
+ $ client = Client::query ()->find ($ client ->_id );
464
+ $ client ->skillsWithCustomKeys ()->attach ($ skill1 );
465
+ $ this ->assertCount (1 , $ client ->skillsWithCustomKeys );
466
+
467
+ self ::assertIsString ($ skill1 ->cskill_id );
468
+ self ::assertContains ($ skill1 ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
469
+ self ::assertNotContains ($ skill1 ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
373
470
374
- $ skill2 ->refresh ();
375
- self ::assertIsString ($ skill2 ->_id );
376
- self ::assertNotContains ($ skill2 ->_id , $ experience ->skillsWithCustomRelatedKey ->pluck ('cskill_id ' ));
471
+ $ check = Skill::query ()->find ($ skill1 ->_id );
472
+ self ::assertIsString ($ check ->_id );
473
+ self ::assertContains ($ check ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
474
+ self ::assertNotContains ($ check ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
377
475
}
378
476
379
- public function testBelongsToManySyncEloquentCollectionWithCustomParentKey (): void
477
+ public function testBelongsToManyAttachEloquentCollectionWithCustomKeys (): void
380
478
{
381
- $ experience = Experience ::create (['cexperience_id ' => (string ) (new ObjectId ()), 'years ' => '5 ' ]);
382
- $ skill1 = Skill::create (['name ' => 'PHP ' ]);
383
- $ skill2 = Skill::create (['name ' => 'Laravel ' ]);
479
+ $ client = Client ::create (['cclient_id ' => (string ) (new ObjectId ()), 'years ' => '5 ' ]);
480
+ $ skill1 = Skill::create (['cskill_id ' => ( string ) ( new ObjectId ()), ' name ' => 'PHP ' ]);
481
+ $ skill2 = Skill::create (['cskill_id ' => ( string ) ( new ObjectId ()), ' name ' => 'Laravel ' ]);
384
482
$ collection = new Collection ([$ skill1 , $ skill2 ]);
385
483
386
- $ experience = Experience::query ()->find ($ experience ->id );
387
- $ experience ->skillsWithCustomParentKey ()->sync ($ collection );
388
- $ this ->assertCount (2 , $ experience ->skillsWithCustomParentKey );
484
+ $ client = Client::query ()->find ($ client ->_id );
485
+ $ client ->skillsWithCustomKeys ()->attach ($ collection );
486
+ $ this ->assertCount (2 , $ client ->skillsWithCustomKeys );
487
+
488
+ self ::assertIsString ($ skill1 ->cskill_id );
489
+ self ::assertContains ($ skill1 ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
490
+ self ::assertNotContains ($ skill1 ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
491
+
492
+ self ::assertIsString ($ skill2 ->cskill_id );
493
+ self ::assertContains ($ skill2 ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
494
+ self ::assertNotContains ($ skill2 ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
495
+
496
+ $ check = Skill::query ()->find ($ skill1 ->_id );
497
+ self ::assertIsString ($ check ->cskill_id );
498
+ self ::assertContains ($ check ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
499
+ self ::assertNotContains ($ check ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
500
+
501
+ $ check = Skill::query ()->find ($ skill2 ->_id );
502
+ self ::assertIsString ($ check ->cskill_id );
503
+ self ::assertContains ($ check ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
504
+ self ::assertNotContains ($ check ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
505
+ }
506
+
507
+ public function testBelongsToManyDetachWithCustomKeys (): void
508
+ {
509
+ $ client = Client::create (['cclient_id ' => (string ) (new ObjectId ()), 'years ' => '5 ' ]);
510
+ $ skill1 = Skill::create (['cskill_id ' => (string ) (new ObjectId ()), 'name ' => 'PHP ' ]);
511
+ $ skill2 = Skill::create (['cskill_id ' => (string ) (new ObjectId ()), 'name ' => 'Laravel ' ]);
512
+
513
+ $ client = Client::query ()->find ($ client ->_id );
514
+ $ client ->skillsWithCustomKeys ()->sync ([$ skill1 ->cskill_id , $ skill2 ->cskill_id ]);
515
+ $ this ->assertCount (2 , $ client ->skillsWithCustomKeys );
516
+
517
+ $ client ->skillsWithCustomKeys ()->detach ($ skill1 ->cskill_id );
518
+ $ client ->load ('skillsWithCustomKeys ' ); // Reload the relationship based on the latest pivot column's data
519
+ $ this ->assertCount (1 , $ client ->skillsWithCustomKeys );
520
+
521
+ self ::assertIsString ($ skill1 ->cskill_id );
522
+ self ::assertNotContains ($ skill1 ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
523
+ self ::assertNotContains ($ skill1 ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
389
524
390
- self ::assertIsString ($ skill1 ->_id );
391
- self ::assertContains ($ skill1 ->_id , $ experience ->skillsWithCustomParentKey ->pluck ('_id ' ));
525
+ self ::assertIsString ($ skill2 ->cskill_id );
526
+ self ::assertContains ($ skill2 ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
527
+ self ::assertNotContains ($ skill2 ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
528
+
529
+ $ check = Skill::query ()->find ($ skill1 ->_id );
530
+ self ::assertIsString ($ check ->cskill_id );
531
+ self ::assertNotContains ($ check ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
532
+ self ::assertNotContains ($ check ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
533
+
534
+ $ check = Skill::query ()->find ($ skill2 ->_id );
535
+ self ::assertIsString ($ check ->cskill_id );
536
+ self ::assertContains ($ check ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
537
+ self ::assertNotContains ($ check ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
538
+ }
392
539
393
- self ::assertIsString ($ skill2 ->_id );
394
- self ::assertContains ($ skill2 ->_id , $ experience ->skillsWithCustomParentKey ->pluck ('_id ' ));
540
+ public function testBelongsToManyDetachModelWithCustomKeys (): void
541
+ {
542
+ $ client = Client::create (['cclient_id ' => (string ) (new ObjectId ()), 'years ' => '5 ' ]);
543
+ $ skill1 = Skill::create (['cskill_id ' => (string ) (new ObjectId ()), 'name ' => 'PHP ' ]);
544
+ $ skill2 = Skill::create (['cskill_id ' => (string ) (new ObjectId ()), 'name ' => 'Laravel ' ]);
545
+
546
+ $ client = Client::query ()->find ($ client ->_id );
547
+ $ client ->skillsWithCustomKeys ()->sync ([$ skill1 ->cskill_id , $ skill2 ->cskill_id ]);
548
+ $ this ->assertCount (2 , $ client ->skillsWithCustomKeys );
549
+
550
+ $ client ->skillsWithCustomKeys ()->detach ($ skill1 );
551
+ $ client ->load ('skillsWithCustomKeys ' ); // Reload the relationship based on the latest pivot column's data
552
+ $ this ->assertCount (1 , $ client ->skillsWithCustomKeys );
553
+
554
+ self ::assertIsString ($ skill1 ->cskill_id );
555
+ self ::assertNotContains ($ skill1 ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
556
+ self ::assertNotContains ($ skill1 ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
557
+
558
+ self ::assertIsString ($ skill2 ->cskill_id );
559
+ self ::assertContains ($ skill2 ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
560
+ self ::assertNotContains ($ skill2 ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
561
+
562
+ $ check = Skill::query ()->find ($ skill1 ->_id );
563
+ self ::assertIsString ($ check ->cskill_id );
564
+ self ::assertNotContains ($ check ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
565
+ self ::assertNotContains ($ check ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
566
+
567
+ $ check = Skill::query ()->find ($ skill2 ->_id );
568
+ self ::assertIsString ($ check ->cskill_id );
569
+ self ::assertContains ($ check ->cskill_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
570
+ self ::assertNotContains ($ check ->_id , $ client ->skillsWithCustomKeys ->pluck ('cskill_id ' ));
395
571
}
396
572
397
573
public function testBelongsToManySyncAlreadyPresent (): void
0 commit comments