Parent Axis and Child Axis issue

hi guys I have an issue and I feel like i have exhausted every avenue. I have an object pickup script attached to a box and when I pick up the box it parents to my playerCam and then I can use the scroll wheel to rotate the box forwards and backwards which is working fine as I want it to.

shown here the white arrow is player direction and the red arrow is the box rotation.
93999-pickedupfront.jpg

the issue I’m having is if I grab it from the side it uses its own axis so when I try to rotate the box forwards or backwards again it rotates left and right as shown in the image below. I would like it to always rotate forwards from the player no matter how I pick it up. I don’t want the box to change its position on pickup. For example, if I pick it up from the corner, that corner will still be facing me but I can still rotate it towards or away from the player.

shown here the white arrow is player direction and the red arrow is the box rotation and the green arrow is how I would like the box to rotate.
94000-pickedupside.jpg

I hope what i have said is understandable to you. Below is the script I have attached to my box. I’ve struggled with this for a couple of weeks now and had every outcome apart from what’s needed. Any help at all would be greatly appreciated.

Thanks in advance.

 using UnityEngine;
 using System.Collections;

    public class PickUp : MonoBehaviour 
{
	
	public Transform player;
    public Transform playerCam;
	public Transform item;
	public float throwForce = 400;
	public bool hasPlayer = false;
	public bool beingCarried = false;
	public float turnSpeed = 400f;
	float rotSpeed = 20;

	void Start ()
	 {
        }
	void Update ()
	{
		Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
		RaycastHit hit;

		if (Physics.Raycast (ray, out hit, 1)) {
			hasPlayer = true;
		} else {
			hasPlayer = false;
		}
		if (hasPlayer && Input.GetMouseButton(0)) {
			GetComponent<Rigidbody>().isKinematic = true;
			item.transform.parent = playerCam.transform;
			beingCarried = true;
		}
		if (beingCarried) {
			RotateFunction ();
			}
			if (Input.GetKeyDown (KeyCode.Mouse0)) {
				GetComponent<Rigidbody> ().isKinematic = false;
				transform.parent = null;
				beingCarried = false;
				GetComponent<Rigidbody> ().AddForce (playerCam.forward * throwForce);
			} else if (Input.GetKeyDown (KeyCode.Mouse1)) {
				GetComponent<Rigidbody> ().isKinematic = false;
				transform.parent = null;
				beingCarried = false;
			}
		}
	void RotateFunction()
	{
		if (Input.GetAxis("Mouse ScrollWheel") > 0f ) // forwards
			{
			item.transform.Rotate(Vector3.right, turnSpeed * Time.deltaTime);
		}         
			else if (Input.GetAxis("Mouse ScrollWheel") < 0f ) // backwards
				{
			item.transform.Rotate(Vector3.right, -turnSpeed * Time.deltaTime);
			}
		}
	}

I solved the question and here are the changes if anyone else needs to know. I had to use an empty game object as a child of the box and then un child it when i pick up the box, rotate it to match the player cam and then parent the box to the empty game object as not to change the rotation of the box. then when I let go of the box I reparent the empty game object to the box again and it works just as I wanted.

  using UnityEngine;
  using System.Collections;
 
     public class PickUp : MonoBehaviour 
 {
     
     public Transform player;
     public Transform playerCam;
     public Transform item;
     public Transform empty;
     public float throwForce = 400;
     public bool hasPlayer = false;
     public bool beingCarried = false;
     public float turnSpeed = 400f;
     float rotSpeed = 20;
 
     void Start ()
      {
         }
     void Update ()
     {
         Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
         RaycastHit hit;
 
         if (Physics.Raycast (ray, out hit, 1)) {
             hasPlayer = true;
         } else {
             hasPlayer = false;
         }
         if (hasPlayer && Input.GetMouseButton(0)) {
             GetComponent<Rigidbody>().isKinematic = true;
             		empty.transform.parent = null;
			empty.transform.rotation = playerCam.transform.rotation;
			item.transform.parent = empty.transform;
			empty.transform.parent = playerCam.transform;
             beingCarried = true;
         }
         if (beingCarried) {
             RotateFunction ();
             }
             if (Input.GetKeyDown (KeyCode.Mouse0)) {
                 GetComponent<Rigidbody> ().isKinematic = false;
                 transform.parent = null;
                 empty.transform.parent = item.transform;
                 beingCarried = false;
                 GetComponent<Rigidbody> ().AddForce (playerCam.forward * throwForce);
             } else if (Input.GetKeyDown (KeyCode.Mouse1)) {
                 GetComponent<Rigidbody> ().isKinematic = false;
                 transform.parent = null;
                 empty.transform.parent = item.transform;
                 beingCarried = false;
             }
         }
     void RotateFunction()
     {
         if (Input.GetAxis("Mouse ScrollWheel") > 0f ) // forwards
             {
             empty.transform.Rotate(Vector3.right, turnSpeed * Time.deltaTime);
         }         
             else if (Input.GetAxis("Mouse ScrollWheel") < 0f ) // backwards
                 {
             empty.transform.Rotate(Vector3.right, -turnSpeed * Time.deltaTime);
             }
         }
     }