5
5
use Closure ;
6
6
use Illuminate \Database \Eloquent \Builder ;
7
7
use Illuminate \Database \Eloquent \Model ;
8
+ use Illuminate \Support \Arr ;
9
+ use Illuminate \Validation \Rule ;
8
10
use Lomkit \Rest \Concerns \Relations \HasPivotFields ;
9
11
use Lomkit \Rest \Contracts \QueryBuilder ;
10
12
use Lomkit \Rest \Contracts \RelationResource ;
13
+ use Lomkit \Rest \Http \Resource ;
14
+ use Lomkit \Rest \Relations \Traits \HasMultipleResults ;
11
15
12
16
class BelongsToMany extends Relation implements RelationResource
13
17
{
14
- use HasPivotFields;
18
+ use HasPivotFields, HasMultipleResults;
19
+
20
+ public function rules (Resource $ resource , string $ prefix )
21
+ {
22
+ return array_merge (
23
+ parent ::rules ($ resource , $ prefix ),
24
+ [
25
+ $ prefix .'.*.pivot ' => [
26
+ 'prohibited_if: ' .$ prefix .'.*.operation,detach ' ,
27
+ 'array: ' .Arr::join ($ this ->getPivotFields (), ', ' )
28
+ ]
29
+ ]
30
+ );
31
+ }
15
32
16
33
public function afterMutating (Model $ model , Relation $ relation , array $ mutationRelations )
17
34
{
18
35
foreach ($ mutationRelations [$ relation ->relation ] as $ mutationRelation ) {
19
- $ model
20
- ->{$ relation ->relation }()
21
- ->{$ mutationRelation ['operation ' ] === 'detach ' ? 'detach ' : 'attach ' }(
22
- app ()->make (QueryBuilder::class, ['resource ' => $ relation ->resource ()])
23
- ->applyMutation ($ mutationRelation )
24
- );
36
+ if ($ mutationRelation ['operation ' ] === 'detach ' ) {
37
+ $ model
38
+ ->{$ relation ->relation }()
39
+ ->detach (
40
+ app ()->make (QueryBuilder::class, ['resource ' => $ relation ->resource ()])
41
+ ->applyMutation ($ mutationRelation )
42
+ ->getKey ()
43
+ );
44
+ } else {
45
+ $ model
46
+ ->{$ relation ->relation }()
47
+ ->attach (
48
+ [
49
+ app ()->make (QueryBuilder::class, ['resource ' => $ relation ->resource ()])
50
+ ->applyMutation ($ mutationRelation )
51
+ ->getKey ()
52
+ =>
53
+ $ mutationRelation ['pivot ' ] ?? []
54
+ ]
55
+ );
56
+ }
25
57
}
26
58
}
27
59
}
0 commit comments