Вот мое решение
Хорошо, после многих исследований, проб и ошибок.
Я сделал пару вещей:
- Измените новое правило, чтобы разрешить редактирование определенного поля в базе данных firebase
- Измените код PHP, так как я не могу выполнить фильтр / запрос, а затем обновить.поэтому я должен был сделать это без фильтра / запроса и затем обновить данные
1.Изменения в правиле базы данных Firebase
Я изменяю правило на следующее:
{
"rules": {
".read": true,
".write": true,
"chat": {
"detail": {
"$id_pesan" :{
".indexOn": ["is_read"]
}
}
}
}
}
Несколько коротких объяснений: данные хранятся в чате / подробно ///, так как мне нужноВ состоянии изменить то, что внутри, я добавил ".indexOn": ["is_read"] Я изменяю правило и помещаю индексирование в chat / detail /.
2.Изменить код PHP
Сначала я хочу сделать следующее:
- Инициализировать Firebase
- Установить ссылки
- Сделать обновление вызовав то время как поле запроса (в 1 вызове)
Но, похоже, пакет не поддерживает то, что я хотел сделать.поэтому вместо этого мне нужно запросить поле и сначала получить уникальное значение идентификатора.Затем я превратил его в ассоциативный массив, а затем использовал его для обновления базы данных
, вот новый код
//initialize
$database = $firebase->getDatabase();
//get value of all the unique ID
$getValue = $database
->getReference('chat/detail/'. $id_pesan)
->orderByChild('is_read')
->equalTo('false')
->getValue();
//initialize Array
$update = [];
//make the array necessary to update the firebase database
/*
What the Array should looks like
<Unique ID>/<variable I wanted to change> => "<new Value>"
Example :
"-IUAYS678/is_read" => "true"
"-JVHBY817/is_read" => "true"
*/
foreach($updatePesan_1 as $k => $v)
{
$update[$k. "/is_read"]="true";
}
//Update the Firebase Database
$updatePesan_1_process=$database->getReference('chat/detail/'. $id_pesan)
->update($update);
Надеюсь, это поможет