mpociot/laravel-firebase-sync
Installation:
composer require mpociot/laravel-firebase-sync
Add Firebase credentials to config/services.php:
'firebase' => [
'database_url' => env('FIREBASE_DATABASE_URL'),
'secret' => env('FIREBASE_SECRET'),
]
Publish Config:
php artisan vendor:publish --provider="Mpociot\FirebaseSync\FirebaseSyncServiceProvider"
Update .env with your Firebase credentials.
First Use Case:
Sync a model (e.g., Post) to Firebase:
use Mpociot\FirebaseSync\HasFirebaseSync;
class Post extends Model
{
use HasFirebaseSync;
}
Automatically syncs create, update, and delete operations to Firebase.
Model Integration:
HasFirebaseSync trait to Eloquent models.firebaseSync() method:
protected $firebaseSync = [
'path' => 'posts', // Firebase path (default: plural model name)
'fields' => ['title', 'content'], // Fields to sync (default: all fillable)
];
Manual Sync:
$post = Post::find(1);
$post->syncToFirebase();
Post::listenForFirebaseUpdates(function ($data) {
// Handle realtime updates
});
Querying Firebase:
$posts = Post::getFromFirebase();
$posts = Post::getFromFirebase(['limitToLast' => 5]);
$post->syncToFirebase()->fireSyncEvent();
firebaseSync():
protected $firebaseSync = [
'excludeDeleted' => true,
];
Outdated Package:
Configuration Quirks:
database_url must end with .firebaseio.com (not .com).secret is optional but recommended for write operations.Data Mismatches:
Race Conditions:
protected $firebaseSync = [
'optimisticLock' => 'updated_at',
];
Enable Logging:
'firebase' => [
'log' => true, // Add to config/services.php
];
Check storage/logs/laravel-firebase-sync.log.
Common Errors:
secret or Firebase rules.database_url is accessible from your server.Custom Sync Logic:
Override syncToFirebase() or syncFromFirebase() in your model:
public function syncToFirebase()
{
$this->setFirebaseData(['custom_key' => 'custom_value']);
return $this;
}
Firebase Rules: Use this package with custom Firebase rules for security.
Offline Support: Implement local caching for offline-first apps (not built-in; requires custom logic).
Testing:
Use FirebaseMock for unit tests:
$this->partialMock(Mpociot\FirebaseSync\Firebase::class, ['get', 'post', 'put', 'delete']);
How can I help you explore Laravel packages today?