我正在尝试使用kreait / firebase-php软件包更新firebase实时数据库。
这是我的树
我需要更新/detail/pesan/1/<unique ID>
的子项,该子项具有is_read
的{{1}}值,并将其更新为false
。
这是我的代码的一部分:
true
但是我得到这个错误:
$database = $firebase->getDatabase();
$id_pesan=1;
/*
Update Firebase is_read
*/
$update = ['/is_read' => "true"];
$updatePesan_1 = $database
->getReference('chat/detail/'. $id_pesan)
->orderByChild('is_read')
->equalTo('false')
->update($update);
当我更改它以首先获取值然后更新/设置它时:
Call to undefined method Kreait\Firebase\Database\Query::update()
我收到此错误:
{“状态”:“错误”,“错误”:400,“消息”:“索引未定义,为路径\” /聊天/详细信息/添加\“。indexOn \”:\“ is_read \” 1 \“,遵守规则”}
我要做的是首先过滤/查询数据库,以查找具有is_read = false的特定树的子代,并将值从“ false”更新为“ true”。
是否可以查询firebase数据库然后对其进行更新?
如果是的话,我该如何修正我的代码来实现这一目标?
答案 0 :(得分:1)
这是我的解决方案
好吧,经过多次研究和反复试验。
我做了几件事:
1。对Firebase数据库规则的更改
我将规则更改为此:
{
"rules": {
".read": true,
".write": true,
"chat": {
"detail": {
"$id_pesan" :{
".indexOn": ["is_read"]
}
}
}
}
}
一些简短的解释: 数据存储在chat / detail /// 由于我需要能够更改内部内容,因此添加了“ .indexOn”:[“ is_read”],我更改了规则,并将索引置于chat / detail /之内。
2。更改PHP代码
首先,我要做的是:
但是,该软件包似乎不支持我想做的事情。因此,我要做的是查询字段并首先获取唯一的ID值。然后我将其放入关联数组,然后使用它来更新数据库
这是新代码
//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);
我希望这对您有帮助