Reputation: 4663
I want to connect laravel project with firebase. I do this:
configure config/services.php
'firebase' => [
'api_key' => 'AIzaSyDrioEmJqa6Ir9ocpl0UuA3No', // Only used for JS integration
'auth_domain' => 'bum.firebaseapp.com', // Only used for JS integration
'database_url' => 'https://8c5c.firebaseio.com',
'secret' => '8wjs4WLjJ5hQ4lsCoUXUWiaJ3RIX',
'storage_bucket' => 'STORAGE_BUCKET', // Only used for JS integration
],
I want to get data form firebase DB but when i run this command on thinker
App\Users::first();
I got this error
Illuminate\Database\QueryException with message 'SQLSTATE[HY000] [2002] No connection could be made because the target machin e actively refused it. (SQL: select * from
users
limit 1)'
Also this is my users model
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Mpociot\Firebase\SyncsWithFirebase;
class Users extends Model
{
use SyncsWithFirebase;
protected $table = 'users';
}
Do you guide me?
Upvotes: 0
Views: 4893
Reputation: 131
Here is the code which i use to perform all tasks with realtime firebase
class HomeController extends Controller
{
private $FIREBASE_DB_URL;
private $FIREBASE_JSON;
private $FIREBASE;
private $FACTORY;
public function __construct()
{
$this->middleware('auth');
$this->FIREBASE_DB_URL = env("FIREBASE_DB_URL");
$this->FIREBASE_JSON = getcwd(). DIRECTORY_SEPARATOR .'assets'.DIRECTORY_SEPARATOR.'tapmap-firebase.json';
$this->FIREBASE = (new Factory)->withServiceAccount($this->FIREBASE_JSON )->withDatabaseUri($this->FIREBASE_DB_URL)->createDatabase();
$this->FACTORY = (new Factory)->withServiceAccount($this->FIREBASE_JSON);
}
public function index()
{
$data = $this->FIREBASE->getReference('/')->getValue();
//render to blade file
return view('index',['users'=>$data]);
}
public function store(Request $request)
{
$this->validate($request,[
'title'=>'required',
'lat'=>'required',
'lng'=>'required'
]);
$lastId = 1;
if($request->lastId != null)
{
$lastId = $request->lastId;
}
// Save data to firebase without image
if(!$request->hasFile('pic'))
{
$this->FIREBASE->getReference('/'.$lastId)->set([
"title" => $request->title == '' ? '' : $request->title,
"address" => $request->address == '' ? '' : $request->address,
"description" => $request->description == '' ? '' : $request->description,
"phone" => $request->phone == '' ? '' : $request->phone,
"available_unavailable" => $request->available_unavailable == '' ? '' : $request->available_unavailable,
"indoor_outdoor" => $request->indoor_outdoor == '' ? '' : $request->indoor_outdoor,
"self_ask_a_member" => $request->self_ask_a_member == '' ? '' : $request->self_ask_a_member,
"lat" => $request->lat == '' ? '' : $request->lat,
"lng" => $request->lng == '' ? '' : $request->lng,
"pic" => "",
]);
}else{
$storage = $this->FACTORY->createStorage();
$image = $request->file('pic');
$localfolder = public_path('firebase-images') .'/';
$extension = $image->getClientOriginalExtension();
$file = $lastId. '.' . $extension;
$image_url = '';
// Upload image to firebase storage
if ($image->move($localfolder, $file)) {
$uploadedfile = fopen($localfolder.$file, 'r');
$image_url_object = $storage->getBucket()->upload($uploadedfile, [
'name' => 'tapImages/'.$file,
]);
unlink($localfolder . $file);
$expiresAt = new \DateTime('3100-01-01');
$image_url = $image_url_object->signedUrl($expiresAt);
}
$this->FIREBASE->getReference('/'.$lastId)->set([
"title" => $request->title,
"address" => $request->address,
"description" => $request->description,
"phone" => $request->phone,
"available_unavailable" => $request->available_unavailable,
"indoor_outdoor" => $request->indoor_outdoor,
"self_ask_a_member" => $request->self_ask_a_member,
"lat" => $request->lat,
"lng" => $request->lng,
"pic" => $image_url,
]);
}
return back();
}
// Update post record
public function update(Request $request)
{
$this->validate($request,[
'title'=>'required',
'lat'=>'required',
'lng'=>'required'
]);
if($request->updateID == '' || $request->updateID == null)
{
return back()->with('failed','Something went wrong');
}
if(!$request->hasFile('update-image')){
$this->FIREBASE->getReference('/'.$request->updateID)->set([
"title" => $request->title,
"address" => $request->address,
"description" => $request->description,
"phone" => $request->phone,
"available_unavailable" => $request->available_unavailable,
"indoor_outdoor" => $request->indoor_outdoor,
"self_ask_a_member" => $request->self_ask_a_member,
"lat" => $request->lat,
"lng" => $request->lng,
"pic" => $request->prev_user_pic == '' ? '' : $request->prev_user_pic,
]);
}else{
$storage = $this->FACTORY->createStorage();
if($request->prev_user_pic != '')
{
$var = explode('/', $request->prev_user_pic);
$key = array_search('tapImages', $var);
$string = $var[$key+1];
$file_name = strtok($string, '?');
$imageReference = $storage->getBucket()->object("tapImages/".$file_name);
if($imageReference->exists())
$imageReference->delete();
}
$image = $request->file('update-image');
$localfolder = public_path('firebase-images') .'/';
$extension = $image->getClientOriginalExtension();
$file = $request->updateID. '.' . $extension;
$image_url = '';
if ($image->move($localfolder, $file)) {
$uploadedfile = fopen($localfolder.$file, 'r');
$image_url_object = $storage->getBucket()->upload($uploadedfile, [
'name' => 'tapImages/'.$file,
]);
unlink($localfolder . $file);
$expiresAt = new \DateTime('3100-01-01');
$image_url = $image_url_object->signedUrl($expiresAt);
}
$this->FIREBASE->getReference('/'.$request->updateID)->set([
"title" => $request->title,
"address" => $request->address,
"description" => $request->description,
"phone" => $request->phone,
"available_unavailable" => $request->available_unavailable,
"indoor_outdoor" => $request->indoor_outdoor,
"self_ask_a_member" => $request->self_ask_a_member,
"lat" => $request->lat,
"lng" => $request->lng,
"pic" => $image_url,
]);
}
return back();
}
public function destroy(Request $request)
{
$factory = (new Factory)->withServiceAccount($this->FIREBASE_JSON);
$storage = $factory->createStorage();
$key = $request->id;
if($key == '' || $key == null)
{
return back()->with('failed','Record id does not exists');
}
// Delete the image of post
$post = $this->FIREBASE->getReference('/'.$key)->getValue();
if($post['pic'] != '')
{
$var = explode('/', $post['pic']);
$key_arr = array_search('tapImages', $var);
$string = $var[$key_arr+1];
$file_name = strtok($string, '?');
$imageReference = $storage->getBucket()->object("tapImages/".$file_name);
if($imageReference->exists())
$imageReference->delete();
}
// Delete post
if($this->FIREBASE->getReference('/'.$key)->remove())
{
return back()->with('success','Post removed successfully');
}
else
{
return back()->with('failed','Something went wrong!');
}
}
public function show($id)
{
// send post details with the help of id
$firebase = (new Factory)
->withServiceAccount($this->FIREBASE_JSON )
->withDatabaseUri($this->FIREBASE_DB_URL)
->createDatabase();
$data = $firebase->getReference('/'.$id)->getValue();
return $data;
}
}
Upvotes: 0
Reputation: 131
If you want to fetch all data from the database then you can use this code.
Here $this->FIREBASE_JSON
is the unique private key and $this->FIRE_DB_URL
is the URL of your database and these are initialized in the constructor.
$firebase = (new Factory)
->withServiceAccount($this->FIREBASE_JSON )
->withDatabaseUri($this->FIREBASE_DB_URL)
->createDatabase();
$data = $firebase->getReference('/')->getValue();
Upvotes: 0
Reputation: 359
Connect Firebase with Laravel using PHP SDK like this
public function index(){
$serviceAccount = ServiceAccount::fromJsonFile(__DIR__.'/Laraveltesting-6aeda3a963f2.json');
$firebase = (new Factory)
->withServiceAccount($serviceAccount)
->withDatabaseUri('https://laraveltesting-bd2b9.firebaseio.com/')
->create();
$database = $firebase->getDatabase();
$newPost = $database
->getReference('blog/posts')
->push([
'title' => 'Post title',
'body' => 'This should probably be longer.'
]);
//$newPost->getKey(); // => -KVr5eu8gcTv7_AHb-3-
//$newPost->getUri(); // => https://my-project.firebaseio.com/blog/posts/-KVr5eu8gcTv7_AHb-3-
//$newPost->getChild('title')->set('Changed post title');
//$newPost->getValue(); // Fetches the data from the realtime database
//$newPost->remove();
echo"<pre>";
print_r($newPost->getvalue());
}
Upvotes: 0
Reputation: 4663
OK! At the end I use this tutorial and fix my problem
My controller
<?php
namespace App\Http\Controllers;
use Kreait\Firebase;
use Kreait\Firebase\Factory;
use Kreait\Firebase\ServiceAccount;
use Illuminate\Http\Request;
class FirebaseController extends Controller
{
public function index(){
$serviceAccount = ServiceAccount::fromJsonFile(__DIR__.'/bumpin-d8c5c-firebase-adminsdk-lerig-cb68aaed.json');
$firebase = (new Factory)
->withServiceAccount($serviceAccount)
->create();
$db = $firebase->getDatabase();
$reference = $db->getReference('users');
$snapshot = $reference->getSnapshot();
$value = $snapshot->getValue();
dd($value);
return view('welcome' , compact('value'));
}
}
From your Firebase console you can get your .json file Follow this path:
Project Preview -> Project setting -> service accounts -> firebase admin sdk
download private key as json file and seve it
Then move .json file to controller and use that name in the controller like my example
$serviceAccount = ServiceAccount::fromJsonFile(__DIR__.'/bumpin-d8c5c-firebase-adminsdk-lerig-cb68aaed.json');
I hope this help some one!
Upvotes: 2