duan32342 2016-01-15 09:22
浏览 503

Laravel map():如何改变对象和数组?

I have a multidimensional collection. I want to iterate it and alter some of its child objects and arrays using the map() function: https://laravel.com/docs/5.1/collections#method-map

Sample content:

[
    {
        'address': 'Somestreet 99'
        'orders': [
            {'id': 11},
            {'id': 67}
        ]
    }
]

Example

  $deliveries = $delivery_addresses->map(function($delivery_address){
     $orders = $delivery_address->orders->filter(function($order){
        return $order->id == 67;
     });

     $delivery_address['address'] = 'A different street 44'
     $delivery_address['orders'] = $orders;
     $delivery_address['a_new_attribute'] = 'Some data...';

     return $delivery_address;
  });

Expected result:

[
    {
        'address': 'A different street 44'
        'orders': [
            {'id': 67}
        ],
        'a_new_attribute': 'Some data...;
    }
]

The result is that only string type variables will be changed. Any arrays or objects will stay the same. Why is this and how to get around it? Thanks! =)

  • 写回答

2条回答 默认 最新

  • douhao9203 2016-01-15 09:33
    关注

    Addressing your recent edits, try this:

    $deliveries = $deliver_addresses->map(function($da) {
        $orders = $da->orders->filter(function($order) {
            return $order->id == 67;
        });
    
        $da->unused_attribute = $orders->all();
    
        return $da;
    });
    

    What the case most likely is here is that you are correctly overwriting that attribute. Then when you are attempting to access it Laravel is querying the orders() relationship and undoing your changes. As far as Laravel is concerned these are the same:

    $delivery_address->orders;
    $delivery_address['orders'];
    

    This is why the changes are only working on objects. If you want to save that permanently then actually save it, if not use a temporary attribute to contain that data.

    评论

报告相同问题?

悬赏问题

  • ¥15 使用ESP8266连接阿里云出现问题
  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角