Как добавлять / добавлять новые предметы по ключу Laravel Collection - PullRequest
2 голосов
/ 07 октября 2019

Я не знаю, является ли это лучшим или правильным способом сделать это, но в PHP я бы просто сделал это.

        $array = [];

        $array['CODE-123'][] = [
            'name' => 'NAME 001',
            'lastname' => 'LASTNAME 001',
        ];

        $array['CODE-456'][] = [
            'name' => 'NAME 004',
            'lastname' => 'LASTNAME 004',
        ];

php array

        $array['CODE-123'][] = [
            'name' => 'NAME 002',
            'lastname' => 'LASTNAME 002',
        ];


        $array['CODE-456'][] = [
            'name' => 'NAME 005',
            'lastname' => 'LASTNAME 005',
        ];

php array append by key

Но дело в том : Как поступить, чтобы получить тот же результат, но используя Laravel Collection? То есть, как я могу добавлять / добавлять новые элементы, используя «нужный ключ» из коллекции Laravel?

Если я пытаюсь использовать put(), он перезаписывает исходное содержимое ключа.

        $collection = collect();

        $collection->put('CODE-123', [
            'name' => 'NAME 001',
            'lastname' => 'LASTNAME 001',
        ]);

        $collection->put('CODE-456', [
            'name' => 'NAME 004',
            'lastname' => 'LASTNAME 004',
        ]);

enter image description here

Например, я хочу добавить несколько новых элементов в ключ 'CODE-123', если бы это был собственный массив PHP, я бы использовалпара квадратных скобок, но с помощью коллекции я не смог, и она генерирует ErrorException (E_NOTICE) косвенное изменение перегруженного элемента.

$collection['CODE-123'][] = 'some new item...';

1 Ответ

2 голосов
/ 07 октября 2019

Во-первых, я думаю, что в ваших первоначальных декларациях отсутствует набор скобок, которые потребуются для хранения нескольких наборов данных в одном элементе.

$collection->put('CODE-123', [
    [
        'name' => 'NAME 001',
        'lastname' => 'LASTNAME 001',
    ]
]);

Но то, что действительно звучит так, как будто вы пытаетесьсделать, это создать коллекцию коллекций. Так зачем бороться?

$collection = collect();

$collection->put('CODE-123', collect([
    [
        'name' => 'NAME 001',
        'lastname' => 'LASTNAME 001',
    ]
]));

$collection->put('CODE-456',  collect([
    [
        'name' => 'NAME 004',
        'lastname' => 'LASTNAME 004',
    ]
]));

$value = [
    'name' => 'NAME 002',
    'lastname' => 'LASTNAME 002',
];

$collection['CODE-123']->push($value);

dd($collection);
Collection {#1417 ▼
  #items: array:2 [▼
    "CODE-123" => Collection {#1406 ▼
      #items: array:2 [▼
        0 => array:2 [▼
          "name" => "NAME 001"
          "lastname" => "LASTNAME 001"
        ]
        1 => array:2 [▼
          "name" => "NAME 002"
          "lastname" => "LASTNAME 002"
        ]
      ]
    }
    "CODE-456" => Collection {#1414 ▼
      #items: array:1 [▼
        0 => array:2 [▼
          "name" => "NAME 004"
          "lastname" => "LASTNAME 004"
        ]
      ]
    }
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...