Увеличьте родительское значение, если родительское значение уже существует в Firebase php - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь вставить данные в базу данных.Я могу успешно подключаться и вставлять данные вручную, но я хотел бы автоматизировать это.Пользователь загружает файл, и путь к нему сохраняется в $hold_path.Я хотел бы вставить этот путь в базу данных, но я не могу понять, как вставить его автоматически.Например, в базе данных есть пользователи / 1 / image: xxx.Так как users / 1 уже существует, я бы хотел вставить $hold_path в users / 2.Как я могу увеличить 2 до 3, если users / 2 уже существует.

Ниже мой php-код.

require_once './vendor/autoload.php';


use Kreait\Firebase\Factory;
use Kreait\Firebase\ServiceAccount;





$target_path = 'uploads/';
$new_name = incrementFileName($target_path, $_FILES['data']['name']);


if(move_uploaded_file($_FILES['data']['tmp_name'], 'uploads/'.$new_name)) 
{
    echo "The file ".  basename( $_FILES['data']['name']). 
    " has been uploaded";
    $hold_path = "http://xxxx/uploads/" . $new_name;

    echo $hold_path;

    $users = new Users();

    // How to increase the 17 if it already exists in the database automatically, since right now its manual.
    $users->insert([
        '17/image' => $hold_path
    ]);
} else{
    echo "There was an error uploading the file, please try again!";
}



function incrementFileName($file_path,$filename){
 if(count(glob($file_path.$filename))>0)
 {
     $file_ext = end(explode(".", $filename));
     $file_name = str_replace(('.'.$file_ext),"",$filename);
     $newfilename = $file_name.'_'.count(glob($file_path."$file_name*.$file_ext")).'.'.$file_ext;
     return $newfilename;
  }
  else
  {
     return $filename;
  }
}




class Users
{
    protected $database;
    protected $dbname = 'users';


    public function __construct()
    {
        // Connection to Firebase
        $acc = ServiceAccount::fromJsonFile(__DIR__.'/xxx.json');
        $firebase = (new Factory)->withServiceAccount($acc)->create();


        $this->database = $firebase->getDatabase();
    }


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


        if($this->database->getReference($this->dbname)->getSnapshot()->hasChild($userID))
        {
            return $this->database->getReference($this->dbname)->getChild($userID)->getValue();
        }
        else
        {
            return FALSE;
        }
    }

    public function insert(array $data)
    {
        if(empty($data) || !isset($data))
        {
            return FALSE;
        }

        foreach ($data as $key => $value) {
            $this->database->getReference()->getChild($this->dbname)->getChild($key)->set($value);
        }

        return TRUE;

    }


}

?>

Снимок базы данных пользователей.Firebase

Я хочу вставить вновь полученный файл в файл users / 2, а затем автоматически следующий файл в users / 3 и т. Д. ...

...