【问题标题】:Firebase database find keyFirebase 数据库查找密钥
【发布时间】:2021-02-13 06:54:51
【问题描述】:

我正在将我的一些数据库数据保存到 Firebase 实时数据库中,但我无法获取/更新我存储的数据。

代码

这就是我在 firebase 中保存数据的方式

//...
$user->save();
//then
$factory = new Factory;
$firebase = $factory
->withServiceAccount(base_path(env('FIREBASE_CREDENTIALS')))
->withDatabaseUri('https://myapp-d54e6.firebaseio.com/');
$database = $firebase->createDatabase();

$newUser = $database
->getReference('user')
->push($user);

现在我在 firebase 中得到的是这样的:

正如您所见,firebase 将我的数据存储在自己的 uid 下,这让我很难找到和更新我的数据(这让我提出了这个问题)。

问题

现在在我的更新功能中,当我想找到我的用户并更新其数据时,我必须找到 firebase uid 然后获取这些数据。

在更新功能中我有:

$user->save();
// now that my DB is updated, start to update firebase
$factory = new Factory;
$firebase = $factory
->withServiceAccount(base_path(env('FIREBASE_CREDENTIALS')))
->withDatabaseUri('https://myapp-d54e6.firebaseio.com/');
$database = $firebase->createDatabase();

$getData = $database->getReference('users')->getvalue();

$userIDs = [];
foreach($getData as $userData) {
  $userIDs [] = $userData['id'];
}

if(in_array($id, $userIDs )){
  return $id;
} else {
  return 'no';
}

// update part remained for after complete fetching my data..!

这个return $id返回用户ID而不是firebase uid(此时我得到的只是确定firebase中存在这样的数据:/)+我仍然没有这个用户的完整数据,因为我只做了数组上面 foreach 中的 ids。

问题

如何从 firebase 获取我的用户数据并进行更新?

【问题讨论】:

    标签: php laravel firebase firebase-realtime-database


    【解决方案1】:

    已解决

    感谢Frank van Puffelen 的回答,这对我很有帮助,这就是我解决这个问题的方法。

    $user->save();
    // now that my DB is updated, start to update firebase
    $factory = new Factory;
    $firebase = $factory
    ->withServiceAccount(base_path(env('FIREBASE_CREDENTIALS')))
    ->withDatabaseUri('https://myapp-d54e6.firebaseio.com/');
    $database = $firebase->createDatabase();
    
    $getData = $database->getReference('users')->getvalue();
    
    
    foreach($getData as $key_user => $userr) {
        // In case of using variables outside of this loop
        //if(in_array($id, $userr)) {
            //$final_user = $userr;
            //$fireKey = $key_user;
        //}
        $newUser = $database
        ->getReference('users')
        ->getChild($key_user)
        ->set($user);
    }
    

    【讨论】:

      【解决方案2】:

      您需要更改此代码:

      $newUser = $database
      ->getReference('user')
      ->push($user);
      

      当您调用 push() 时,Firebase 会为新数据创建一个唯一 ID。您想要的是将新数据存储在您控制的密钥下,即用户的 UID。看起来像这样:

      $newUser = $database
      ->getReference('user')
      ->getChild("the uid of the user")
      ->set($user);
      

      对于getChild("the uid of the user"),您必须使用用户的 UID,遗憾的是我无法在您的代码中看到从何处获取它。

      【讨论】:

      • 谢谢你的帮助,如果我能解决它会告诉你
      • 谢谢你的修复。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 2019-02-08
      • 1970-01-01
      • 2017-07-02
      相关资源
      最近更新 更多