【问题标题】:Firebase update() method deleting sub child nodes phpFirebase update() 方法删除子子节点php
【发布时间】:2021-06-22 01:16:49
【问题描述】:

我在后端 Php 中生成了以下一组对象,并最初推送到 Firebase。

此处status密钥对将在后端初始级别推送后由移动应用添加。

同样,我在foors/0/ 节点中拥有相同的密钥集和配对。在floors 内,status 密钥对也将由移动应用创建。

我使用后台的 update() 函数来更新最新的值,这里要注意的是我不会拥有后台的 status 键。

$value = [
   "fk_client_id" => "57",
   "fk_project_id" => "20"
    "is_synced" => "1",
    "floors" => [
        "fk_client_id" => "57",
        "fk_project_id" => "20",
        "floor_name" => "RBs - 1"
        ... // except status key pair. rest of the values are same
        ]
    ];
                    
$this->database->getReference('towerids/0/')->update($value);

上述更新操作完美运行,也不会干扰towerids/0/statusstatus节点,但问题是它删除了floors/0/status密钥对。

我需要先调用'towerids/0/floors/0' ref update(),然后我需要调用'towerids/0/' update() 来使这个过程正常工作。

但我在子子笔记上有很多类似的状态键。通过上述方法,为每个引用编写多个更新操作是一个耗时的过程。有没有办法解决这个问题。

【问题讨论】:

    标签: php firebase firebase-realtime-database


    【解决方案1】:

    Firebase的多路径更新功能如下:

    1. 从字典/地图中获取所有顶级键。
    2. 在其中指定的键/子路径上执行集合。

    由于您在字典中指定了floors,因此数据库中floors 下的整个值将被替换。因此,您未指定的其他顶级键将保留其当前值,但所有 floors 将替换为您调用中的值。

    如果您想替换/写入特定子项,请在调用中指定这些子项的路径。所以像:

    $value = [
       "fk_client_id" => "57",
       "fk_project_id" => "20"
        "is_synced" => "1",
        "floors/fk_client_id" => "57",
        "floors/fk_project_id" => "20",
        "floors/floor_name" => "RBs - 1",
    ]
    

    使用 结构,您可以指定要更新的每个键的完整子路径,Firebase 将保留 floors 下的其他键不变。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-09
      • 2016-10-31
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      相关资源
      最近更新 更多