Aquí está mi escenario. Tengo una relación entre suscripción y producto. Cada suscripción pertenece a algún producto y tengo relaciones definidas.
Ahora si hago esto: Subscription::with(['product', 'address'])->get(); Obtendré todas las suscripciones con el producto.
El producto tiene atributos como shipping_price, price, etc.
Ahora, si cambio shipping_price de un producto dentro de una suscripción, cambia shipping_price para ese producto dentro de todas las suscripciones (esto es útil muchas veces, pero esta vez no quiero que este cambio se refleje en todas partes).
Por ejemplo:
$subscriptions = Subscription::with('product')->get(); foreach ($subscriptions as $item) { $item->product->shipping_price = ShippingService::getShippingPrice($item->product->key, $item->product->shipping_price, $item->address->zip); }Esto cambiará shipping_price para cada producto que tenga la misma ID dentro de esas suscripciones.
Mi requisito es detener este comportamiento en este único lugar. Entonces, si cambio un atributo, no cambia otros.
Conozco una forma de volver a consultar con loop y no obtener productos usando una carga ansiosa, pero eso será lento.
Gracias.
Agregaría una propiedad personalizada "real_shipping_price" a este modelo de producto con un accesor getRealShippingPriceAttribute (usando su ShippingService).
Consulte https://laravel.com/docs/5.3/eloquent-serialization#appending-values-to-json por ejemplo.