@@ -990,6 +990,126 @@ public function testHasManySelectableRelationshipRemoveAllRelations()
990990 $ this ->assertCount (2 , $ planets );
991991 }
992992
993+ public function testHasManyWithRelationScoped ()
994+ {
995+ $ this ->crudPanel ->setModel (User::class);
996+ $ this ->crudPanel ->addFields ($ this ->userInputFieldsNoRelationships , 'both ' );
997+ $ this ->crudPanel ->addField ([
998+ 'name ' => 'incomes ' ,
999+ 'subfields ' => [
1000+ [
1001+ 'name ' => 'label ' ,
1002+ 'type ' => 'text ' ,
1003+ ],
1004+ [
1005+ 'name ' => 'type ' ,
1006+ 'type ' => 'hidden ' ,
1007+ 'value ' => 'income ' ,
1008+ ],
1009+ [
1010+ 'name ' => 'amount ' ,
1011+ 'type ' => 'number ' ,
1012+ ],
1013+ ],
1014+ ], 'both ' );
1015+ $ this ->crudPanel ->addField ([
1016+ 'name ' => 'expenses ' ,
1017+ 'subfields ' => [
1018+ [
1019+ 'name ' => 'label ' ,
1020+ 'type ' => 'text ' ,
1021+ ],
1022+ [
1023+ 'name ' => 'type ' ,
1024+ 'type ' => 'hidden ' ,
1025+ 'value ' => 'expense ' ,
1026+ ],
1027+ [
1028+ 'name ' => 'amount ' ,
1029+ 'type ' => 'number ' ,
1030+ ],
1031+ ],
1032+ ], 'both ' );
1033+
1034+ $ faker = Factory::create ();
1035+ $ inputData = [
1036+ 'name ' => $ faker ->name ,
1037+ 'email ' => $ faker ->safeEmail ,
1038+ 'password ' => bcrypt ($ faker ->password ()),
1039+ 'remember_token ' => null ,
1040+ 'incomes ' => [
1041+ [
1042+ 'label ' => $ faker ->name ,
1043+ 'amount ' => 33 ,
1044+ 'type ' => 'income ' ,
1045+ ],
1046+ [
1047+ 'label ' => $ faker ->name ,
1048+ 'amount ' => 22 ,
1049+ 'type ' => 'income ' ,
1050+ ],
1051+ ],
1052+ 'expenses ' => [
1053+ [
1054+ 'label ' => $ faker ->name ,
1055+ 'amount ' => 44 ,
1056+ 'type ' => 'expense ' ,
1057+ ],
1058+ [
1059+ 'label ' => $ faker ->name ,
1060+ 'amount ' => 10 ,
1061+ 'type ' => 'expense ' ,
1062+ ],
1063+ ],
1064+ ];
1065+ $ entry = $ this ->crudPanel ->create ($ inputData );
1066+
1067+ $ firstExpense = $ entry ->expenses ->first ();
1068+ $ firstIncome = $ entry ->incomes ->first ();
1069+ $ this ->assertCount (2 , $ entry ->expenses );
1070+ $ this ->assertCount (2 , $ entry ->incomes );
1071+ $ this ->assertEquals (44 , $ entry ->expenses ->first ()->amount );
1072+ $ this ->assertEquals (33 , $ entry ->incomes ->first ()->amount );
1073+
1074+ $ inputData ['incomes ' ] = [
1075+ [
1076+ 'id ' => 2 ,
1077+ 'label ' => $ faker ->name ,
1078+ 'amount ' => 222 ,
1079+ 'type ' => 'income ' ,
1080+ ],
1081+ ];
1082+ $ inputData ['expenses ' ] = [
1083+ [
1084+ 'id ' => 3 ,
1085+ 'label ' => $ faker ->name ,
1086+ 'amount ' => 44 ,
1087+ 'type ' => 'expense ' ,
1088+ ],
1089+ [
1090+ 'id ' => 4 ,
1091+ 'label ' => $ faker ->name ,
1092+ 'amount ' => 10 ,
1093+ 'type ' => 'expense ' ,
1094+ ],
1095+ ];
1096+ $ this ->crudPanel ->update ($ entry ->id , $ inputData );
1097+
1098+ $ freshIncomes = $ entry ->fresh ()->incomes ;
1099+ $ freshExpenses = $ entry ->fresh ()->expenses ;
1100+ $ this ->assertCount (2 , $ freshExpenses );
1101+ $ this ->assertCount (1 , $ freshIncomes );
1102+ $ this ->assertEquals (2 , $ freshIncomes ->first ()->id );
1103+
1104+ $ inputData ['expenses ' ] = [];
1105+ $ this ->crudPanel ->update ($ entry ->id , $ inputData );
1106+
1107+ $ freshIncomes = $ entry ->fresh ()->incomes ;
1108+ $ freshExpenses = $ entry ->fresh ()->expenses ;
1109+ $ this ->assertCount (0 , $ freshExpenses );
1110+ $ this ->assertCount (1 , $ freshIncomes );
1111+ }
1112+
9931113 public function testHasManySelectableRelationshipWithFallbackId ()
9941114 {
9951115 $ this ->crudPanel ->setModel (User::class);
0 commit comments