@@ -100,16 +100,58 @@ private static function addToIncludedArray(array &$mappings, array &$data, array
100
100
$ includedData = PropertyHelper::setResponseDataTypeAndId ($ mappings , $ value );
101
101
102
102
if (self ::hasIdKey ($ includedData )) {
103
- $ data [JsonApiTransformer::INCLUDED_KEY ][] = array_filter (
104
- array_merge (
105
- [
106
- JsonApiTransformer::TYPE_KEY => $ includedData [JsonApiTransformer::TYPE_KEY ],
107
- JsonApiTransformer::ID_KEY => $ includedData [JsonApiTransformer::ID_KEY ],
108
- JsonApiTransformer::ATTRIBUTES_KEY => $ attributes ,
109
- ],
110
- DataLinksHelper::setResponseDataLinks ($ mappings , $ value )
111
- )
103
+ $ arrayData = array_merge (
104
+ [
105
+ JsonApiTransformer::TYPE_KEY => $ includedData [JsonApiTransformer::TYPE_KEY ],
106
+ JsonApiTransformer::ID_KEY => $ includedData [JsonApiTransformer::ID_KEY ],
107
+ JsonApiTransformer::ATTRIBUTES_KEY => $ attributes ,
108
+ JsonApiTransformer::RELATIONSHIPS_KEY => [],
109
+ ],
110
+ DataLinksHelper::setResponseDataLinks ($ mappings , $ value )
111
+ );
112
+
113
+ $ relationshipData = [];
114
+ self ::addRelationshipsToIncludedResources (
115
+ $ mappings ,
116
+ $ relationshipData ,
117
+ $ value ,
118
+ $ value [Serializer::CLASS_IDENTIFIER_KEY ],
119
+ $ attributes
112
120
);
121
+
122
+ if ($ relationshipData ) {
123
+ $ arrayData [JsonApiTransformer::RELATIONSHIPS_KEY ] = array_merge (
124
+ $ arrayData [JsonApiTransformer::RELATIONSHIPS_KEY ],
125
+ $ relationshipData
126
+ );
127
+ }
128
+
129
+ $ data [JsonApiTransformer::INCLUDED_KEY ][] = array_filter ($ arrayData );
130
+ }
131
+ }
132
+ }
133
+
134
+ /**
135
+ * @param array $mappings
136
+ * @param array $data
137
+ * @param array $value
138
+ * @param string $type
139
+ */
140
+ private static function addRelationshipsToIncludedResources (
141
+ array &$ mappings ,
142
+ array &$ data ,
143
+ array &$ value ,
144
+ $ type
145
+ ) {
146
+ foreach ($ value as $ propertyName => $ attribute ) {
147
+ if (PropertyHelper::isAttributeProperty ($ mappings , $ propertyName , $ type )) {
148
+ $ propertyName = DataAttributesHelper::transformToValidMemberName ($ propertyName );
149
+
150
+ if (is_array ($ attribute ) && array_key_exists (Serializer::CLASS_IDENTIFIER_KEY , $ attribute )) {
151
+ $ data [$ propertyName ][JsonApiTransformer::DATA_KEY ] = PropertyHelper::setResponseDataTypeAndId ($ mappings , $ attribute );
152
+
153
+ continue ;
154
+ }
113
155
}
114
156
}
115
157
}
0 commit comments