PHP从Firebase读取值

时间:2019-06-06 08:13:13

标签: php firebase firebase-realtime-database

我希望能够通过“ test123”读取数据库,看看是否存在。但是它一直返回Naw bool(false),这意味着它找不到'test123'?是因为自定义ID?

enter image description here

Firebase格式

public function get(String $userId = NULL){
    if (empty($userId) || !isset($userId)) { return FALSE; }

    if ($this->database->getReference($this->dbname)->getSnapshot()->hasChild($userId)){
        echo "yoohoo";
        return $this->database->getReference($this->dbname)->getChild($userId)->getValue();
    } else {
      echo "Naww";
        return FALSE;
    }
}
$users->get('test123');

1 个答案:

答案 0 :(得分:2)

我的PHP说得不太好,但这肯定是错误的:

$this->database->getReference($this->dbname)->getSnapshot()->hasChild($userId)

首先,我们不知道$this->dbname是什么,但是乍一看似乎您正在读取整个数据库。

但是,即使您只是在读取正确的节点,该hasChild($userId)也不起作用。此代码检查快照是否具有其等于$userId的值的子节点。那不是您的数据显示的。您的JSON显示一个密钥userId,该密钥的您希望等于$userId的值。所以它更接近getSnapshot().getChild('userId').getValue() == $userId

但是我仍然怀疑这是否行得通,因为您实际上并不知道用户节点的完整路径。在这种情况下,您将需要在userId属性上进行查询。类似于this section of the documentation中的内容:

$db->getReference('accounts')
    // order the reference's children by the values in the field 'userId'
    ->orderByChild('userId')
    // returns all accounts with the exact userID
    ->equalTo($userId)
    ->getSnapshot();