@@ -21,19 +21,24 @@ trait HandlesRelationManyToManyOperations
2121 */
2222 public function attach (Request $ request , $ parentKey )
2323 {
24- $ beforeHookResult = $ this ->beforeAttach ($ request , $ parentKey );
24+ $ parentQuery = $ this ->buildAttachParentFetchQuery ($ request , $ parentKey );
25+ $ parentEntity = $ this ->runAttachParentFetchQuery ($ request , $ parentQuery , $ parentKey );
26+
27+ $ beforeHookResult = $ this ->beforeAttach ($ request , $ parentEntity );
2528 if ($ this ->hookResponds ($ beforeHookResult )) {
2629 return $ beforeHookResult ;
2730 }
2831
29- $ parentQuery = $ this ->buildAttachParentFetchQuery ($ request , $ parentKey );
30- $ parentEntity = $ this ->runAttachParentFetchQuery ($ request , $ parentQuery , $ parentKey );
31-
3232 $ this ->authorize ('update ' , $ parentEntity );
3333
34- $ attachResult = $ this ->performAttach ($ request , $ parentEntity , $ request ->get ('resources ' ), $ request ->get ('duplicates ' , false ));
34+ $ attachResult = $ this ->performAttach (
35+ $ request ,
36+ $ parentEntity ,
37+ $ request ->get ('resources ' ),
38+ $ request ->get ('duplicates ' , false )
39+ );
3540
36- $ afterHookResult = $ this ->afterAttach ($ request , $ attachResult );
41+ $ afterHookResult = $ this ->afterAttach ($ request , $ parentEntity , $ attachResult );
3742 if ($ this ->hookResponds ($ afterHookResult )) {
3843 return $ afterHookResult ;
3944 }
@@ -49,10 +54,10 @@ public function attach(Request $request, $parentKey)
4954 * The hook is executed before attaching relation resource.
5055 *
5156 * @param Request $request
52- * @param int|string $parentKey
57+ * @param Model $parentEntity
5358 * @return mixed
5459 */
55- protected function beforeAttach (Request $ request , $ parentKey )
60+ protected function beforeAttach (Request $ request , Model $ parentEntity )
5661 {
5762 return null ;
5863 }
@@ -164,7 +169,9 @@ function ($resourceKey) use ($resourceModels, $resourceKeyName) {
164169 */
165170 $ resourceModel = $ resourceModels ->where ($ resourceKeyName , $ resourceKey )->first ();
166171
167- return $ resourceModel && (!$ this ->authorizationRequired () || Gate::forUser ($ this ->resolveUser ())->allows ('view ' , $ resourceModel ));
172+ return $ resourceModel && (!$ this ->authorizationRequired () || Gate::forUser (
173+ $ this ->resolveUser ()
174+ )->allows ('view ' , $ resourceModel ));
168175 },
169176 ARRAY_FILTER_USE_KEY
170177 );
@@ -198,10 +205,11 @@ protected function standardizePivotResourcesArray($resources)
198205 * The hook is executed after attaching relation resource.
199206 *
200207 * @param Request $request
208+ * @param Model $parentEntity
201209 * @param array $attachResult
202210 * @return mixed
203211 */
204- protected function afterAttach (Request $ request , array &$ attachResult )
212+ protected function afterAttach (Request $ request , Model $ parentEntity , array &$ attachResult )
205213 {
206214 return null ;
207215 }
@@ -215,19 +223,19 @@ protected function afterAttach(Request $request, array &$attachResult)
215223 */
216224 public function detach (Request $ request , $ parentKey )
217225 {
218- $ beforeHookResult = $ this ->beforeDetach ($ request , $ parentKey );
226+ $ parentQuery = $ this ->buildDetachParentFetchQuery ($ request , $ parentKey );
227+ $ parentEntity = $ this ->runDetachParentFetchQuery ($ request , $ parentQuery , $ parentKey );
228+
229+ $ beforeHookResult = $ this ->beforeDetach ($ request , $ parentEntity );
219230 if ($ this ->hookResponds ($ beforeHookResult )) {
220231 return $ beforeHookResult ;
221232 }
222233
223- $ parentQuery = $ this ->buildDetachParentFetchQuery ($ request , $ parentKey );
224- $ parentEntity = $ this ->runDetachParentFetchQuery ($ request , $ parentQuery , $ parentKey );
225-
226234 $ this ->authorize ('update ' , $ parentEntity );
227235
228236 $ detachResult = $ this ->performDetach ($ request , $ parentEntity , $ request ->get ('resources ' ));
229237
230- $ afterHookResult = $ this ->afterDetach ($ request , $ detachResult );
238+ $ afterHookResult = $ this ->afterDetach ($ request , $ parentEntity , $ detachResult );
231239 if ($ this ->hookResponds ($ afterHookResult )) {
232240 return $ afterHookResult ;
233241 }
@@ -243,10 +251,10 @@ public function detach(Request $request, $parentKey)
243251 * The hook is executed before detaching relation resource.
244252 *
245253 * @param Request $request
246- * @param int|string $parentKey
254+ * @param Model $parentEntity
247255 * @return mixed
248256 */
249- protected function beforeDetach (Request $ request , $ parentKey )
257+ protected function beforeDetach (Request $ request , Model $ parentEntity )
250258 {
251259 return null ;
252260 }
@@ -297,10 +305,11 @@ protected function performDetach(Request $request, Model $parentEntity, array $r
297305 * The hook is executed after detaching relation resource.
298306 *
299307 * @param Request $request
308+ * @param Model $parentEntity
300309 * @param array $detachResult
301310 * @return mixed
302311 */
303- protected function afterDetach (Request $ request , array &$ detachResult )
312+ protected function afterDetach (Request $ request , Model $ parentEntity , array &$ detachResult )
304313 {
305314 return null ;
306315 }
@@ -314,19 +323,24 @@ protected function afterDetach(Request $request, array &$detachResult)
314323 */
315324 public function sync (Request $ request , $ parentKey )
316325 {
317- $ beforeHookResult = $ this ->beforeSync ($ request , $ parentKey );
326+ $ parentQuery = $ this ->buildSyncParentFetchQuery ($ request , $ parentKey );
327+ $ parentEntity = $ this ->runSyncParentFetchQuery ($ request , $ parentQuery , $ parentKey );
328+
329+ $ beforeHookResult = $ this ->beforeSync ($ request , $ parentEntity );
318330 if ($ this ->hookResponds ($ beforeHookResult )) {
319331 return $ beforeHookResult ;
320332 }
321333
322- $ parentQuery = $ this ->buildSyncParentFetchQuery ($ request , $ parentKey );
323- $ parentEntity = $ this ->runSyncParentFetchQuery ($ request , $ parentQuery , $ parentKey );
324-
325334 $ this ->authorize ('update ' , $ parentEntity );
326335
327- $ syncResult = $ this ->performSync ($ request , $ parentEntity , $ request ->get ('resources ' ), $ request ->get ('detaching ' , true ));
336+ $ syncResult = $ this ->performSync (
337+ $ request ,
338+ $ parentEntity ,
339+ $ request ->get ('resources ' ),
340+ $ request ->get ('detaching ' , true )
341+ );
328342
329- $ afterHookResult = $ this ->afterSync ($ request , $ syncResult );
343+ $ afterHookResult = $ this ->afterSync ($ request , $ parentEntity , $ syncResult );
330344 if ($ this ->hookResponds ($ afterHookResult )) {
331345 return $ afterHookResult ;
332346 }
@@ -338,10 +352,10 @@ public function sync(Request $request, $parentKey)
338352 * The hook is executed before syncing relation resources.
339353 *
340354 * @param Request $request
341- * @param int|string $parentKey
355+ * @param Model $parentEntity
342356 * @return mixed
343357 */
344- protected function beforeSync (Request $ request , $ parentKey )
358+ protected function beforeSync (Request $ request , Model $ parentEntity )
345359 {
346360 return null ;
347361 }
@@ -398,10 +412,11 @@ protected function performSync(Request $request, Model $parentEntity, array $res
398412 * The hook is executed after syncing relation resources.
399413 *
400414 * @param Request $request
415+ * @param Model $parentEntity
401416 * @param array $syncResult
402417 * @return mixed
403418 */
404- protected function afterSync (Request $ request , array &$ syncResult )
419+ protected function afterSync (Request $ request , Model $ parentEntity , array &$ syncResult )
405420 {
406421 return null ;
407422 }
@@ -415,19 +430,19 @@ protected function afterSync(Request $request, array &$syncResult)
415430 */
416431 public function toggle (Request $ request , $ parentKey )
417432 {
418- $ beforeHookResult = $ this ->beforeToggle ($ request , $ parentKey );
433+ $ parentQuery = $ this ->buildToggleParentFetchQuery ($ request , $ parentKey );
434+ $ parentEntity = $ this ->runToggleParentFetchQuery ($ request , $ parentQuery , $ parentKey );
435+
436+ $ beforeHookResult = $ this ->beforeToggle ($ request , $ parentEntity );
419437 if ($ this ->hookResponds ($ beforeHookResult )) {
420438 return $ beforeHookResult ;
421439 }
422440
423- $ parentQuery = $ this ->buildToggleParentFetchQuery ($ request , $ parentKey );
424- $ parentEntity = $ this ->runToggleParentFetchQuery ($ request , $ parentQuery , $ parentKey );
425-
426441 $ this ->authorize ('update ' , $ parentEntity );
427442
428443 $ toggleResult = $ this ->performToggle ($ request , $ parentEntity , $ request ->get ('resources ' ));
429444
430- $ afterHookResult = $ this ->afterToggle ($ request , $ toggleResult );
445+ $ afterHookResult = $ this ->afterToggle ($ request , $ parentEntity , $ toggleResult );
431446 if ($ this ->hookResponds ($ afterHookResult )) {
432447 return $ afterHookResult ;
433448 }
@@ -439,10 +454,10 @@ public function toggle(Request $request, $parentKey)
439454 * The hook is executed before toggling relation resources.
440455 *
441456 * @param Request $request
442- * @param int|string $parentKey
457+ * @param Model $parentEntity
443458 * @return mixed
444459 */
445- protected function beforeToggle (Request $ request , $ parentKey )
460+ protected function beforeToggle (Request $ request , Model $ parentEntity )
446461 {
447462 return null ;
448463 }
@@ -491,10 +506,11 @@ protected function performToggle(Request $request, Model $parentEntity, array $r
491506 * The hook is executed after toggling relation resources.
492507 *
493508 * @param Request $request
509+ * @param Model $parentEntity
494510 * @param array $toggleResult
495511 * @return mixed
496512 */
497- protected function afterToggle (Request $ request , array &$ toggleResult )
513+ protected function afterToggle (Request $ request , Model $ parentEntity , array &$ toggleResult )
498514 {
499515 return null ;
500516 }
@@ -509,22 +525,22 @@ protected function afterToggle(Request $request, array &$toggleResult)
509525 */
510526 public function updatePivot (Request $ request , $ parentKey , $ relatedKey )
511527 {
512- $ beforeHookResult = $ this ->beforeUpdatePivot ($ request , $ relatedKey );
528+ $ parentQuery = $ this ->buildUpdatePivotParentFetchQuery ($ request , $ parentKey );
529+ $ parentEntity = $ this ->runUpdatePivotParentFetchQuery ($ request , $ parentQuery , $ parentKey );
530+
531+ $ beforeHookResult = $ this ->beforeUpdatePivot ($ request , $ parentEntity );
513532 if ($ this ->hookResponds ($ beforeHookResult )) {
514533 return $ beforeHookResult ;
515534 }
516535
517- $ parentQuery = $ this ->buildUpdatePivotParentFetchQuery ($ request , $ parentKey );
518- $ parentEntity = $ this ->runUpdatePivotParentFetchQuery ($ request , $ parentQuery , $ parentKey );
519-
520536 $ query = $ this ->buildShowFetchQuery ($ request , $ parentEntity , []);
521537 $ entity = $ this ->runShowFetchQuery ($ request , $ query , $ parentEntity , $ relatedKey );
522538
523539 $ this ->authorize ('update ' , $ entity );
524540
525541 $ updateResult = $ this ->performUpdatePivot ($ request , $ parentEntity , $ relatedKey , $ request ->get ('pivot ' , []));
526542
527- $ afterHookResult = $ this ->afterUpdatePivot ($ request , $ updateResult );
543+ $ afterHookResult = $ this ->afterUpdatePivot ($ request , $ parentEntity , $ updateResult );
528544 if ($ this ->hookResponds ($ afterHookResult )) {
529545 return $ afterHookResult ;
530546 }
@@ -540,10 +556,10 @@ public function updatePivot(Request $request, $parentKey, $relatedKey)
540556 * The hook is executed before updating relation resource pivot.
541557 *
542558 * @param Request $request
543- * @param int|string $relatedKey
559+ * @param Model $parentEntity
544560 * @return mixed
545561 */
546- protected function beforeUpdatePivot (Request $ request , $ relatedKey )
562+ protected function beforeUpdatePivot (Request $ request , Model $ parentEntity )
547563 {
548564 return null ;
549565 }
@@ -595,10 +611,11 @@ protected function performUpdatePivot(Request $request, Model $parentEntity, $re
595611 * The hook is executed after updating relation resource pivot.
596612 *
597613 * @param Request $request
614+ * @param Model $parentEntity
598615 * @param array $updateResult
599616 * @return mixed
600617 */
601- protected function afterUpdatePivot (Request $ request , array &$ updateResult )
618+ protected function afterUpdatePivot (Request $ request , Model $ parentEntity , array &$ updateResult )
602619 {
603620 return null ;
604621 }
0 commit comments