55use Ark4ne \JsonApi \Resources \JsonApiCollection ;
66use Ark4ne \JsonApi \Support \FakeModel ;
77use Illuminate \Http \Request ;
8+ use ReflectionClass ;
89
910trait Schema
1011{
1112 private static array $ schemas = [];
1213
1314 public static function schema (Request $ request = null ): object
1415 {
15- $ request ??= new Request ;
16+ if (isset (self ::$ schemas [static ::class])) {
17+ return self ::$ schemas [static ::class];
18+ }
1619
17- $ resource = new static ( new FakeModel );
20+ $ resource = self :: new ( );
1821
1922 if ($ resource instanceof JsonApiCollection) {
2023 return $ resource ->collects ::schema ($ request );
2124 }
2225
23- if (isset (self ::$ schemas [static ::class])) {
24- return self ::$ schemas [static ::class];
25- }
26+ $ request ??= new Request ;
2627
2728 $ schema = (object )[
2829 'type ' => null ,
@@ -33,12 +34,21 @@ public static function schema(Request $request = null): object
3334 self ::$ schemas [static ::class] = $ schema ;
3435
3536 $ schema ->type = $ resource ->toType ($ request );
36- $ schema ->fields = array_keys ($ resource ->toAttributes ($ request ));
37+ $ schema ->fields = collect ($ resource ->toAttributes ($ request ))-> keys ()-> all ( );
3738
3839 foreach ($ resource ->toRelationships ($ request ) as $ name => $ relation ) {
3940 $ schema ->relationships [$ name ] = $ relation ->getResource ()::schema ();
4041 }
4142
4243 return self ::$ schemas [static ::class];
4344 }
45+
46+ private static function new (): self
47+ {
48+ /** @var self $instance */
49+ $ instance = (new ReflectionClass (static ::class))->newInstanceWithoutConstructor ();
50+ $ instance ->resource = new FakeModel ;
51+
52+ return $ instance ;
53+ }
4454}
0 commit comments