Firestore: запись ключа не существует в предоставленном массиве


Может ли кто-нибудь сказать мне, что пытается сказать мне следующее сообщение об ошибке?

Фатальная ошибка: Неперехваченное исключение 'InvalidArgumentException' с ключевое сообщение-пишет не существует в массиве.' в / vendor / google / cloud / Core / src / ArrayTrait.php: 38

Stack trace: 
    #0 /vendor/google/cloud/Firestore/src/Connection/Grpc.php(127): GoogleCloudFirestoreConnectionGrpc->pluck('writes', Array) 
    #1 /vendor/google/cloud/Firestore/src/WriteBatch.php(381): GoogleCloudFirestoreConnectionGrpc->commit(Array) 
    #2 import.php(45): GoogleCloudFirestoreWriteBatch->commit() 
    #3 {main} thrown in /vendor/google/cloud/Core/src/ArrayTrait.php on line 38

Мой код выглядит так:

$batch = $project->db->batch();
foreach($memberList as $member){
    $addedDocRef = $collection->newDocument();
    $data["id"] = $addedDocRef->id();
    $data["creation"] = $this->generateCreation();
    $data["publication"] = $this->generatePublication();    
    $batch->create($addedDocRef, $data);
}
$batch->commit();
1 2

1 ответ:

Он сообщает вам, что вы выполняете коммит, но пакет не содержит никаких операций. Вероятно, когда ваш $memberList пуст, эта ошибка появляется. Простой способ предотвратить ошибку:

if (! empty($memberList)) {
    $batch->commit();
}

Кроме того, вы уверены, что $batch->create() существует? Вы должны использовать метод set (). Вот последний firestore doc:

$batch = $db->batch();

# Set the data for NYC
$nycRef = $db->collection('cities')->document('NYC');
$batch->set($nycRef, [
    'name' => 'New York City'
]);

# Update the population for SF
$sfRef = $db->collection('cities')->document('SF');
$batch->update($sfRef, [
    ['path' => 'population', 'value' => 1000000]
]);

# Delete LA
$laRef = $db->collection('cities')->document('LA');
$batch->delete($laRef);

# Commit the batch
$batch->commit();