laravel-parse/parse
A Laravel wrapper for the Parse SDK that brings Eloquent-style models and queries to Parse Server. Handle authentication, roles, files, and push notifications with support for Back4App or self-hosted Parse backends, using familiar Laravel syntax throughout.
composer require laravel-parse/parse. The package targets Laravel 5.x; on 5.5+ the service provider is auto-discovered, on older versions add the provider (and optional facade alias) to config/app.php manually.php artisan vendor:publish and open config/parse.php. This is the first file to read — it holds everything that matters (app_id, rest_api_key, master_key, server_url, and often a mount path). The service provider simply calls ParseClient::initialize(...) with these values and binds the SDK into the container.parse.com was shut down in 2017, so server_url must point at your own Parse Server (self-hosted, Docker, or a managed host), typically ending in /parse. Verify credentials before writing feature code.ParseObject, or run a ParseQuery::create('SomeClass') with limit(1)->find(). If that returns without a Parse\ParseException, the bridge is wired correctly and you can start building on top of it.Look first at the service provider and config file; after that, almost everything you write day-to-day is the underlying parse/php-sdk API, not package-specific code.
ParseClient::initialize yourself — you'll fight the binding.PostRepository, UserService). This is the single biggest maintainability win: it gives you a seam for tests, keeps ParseObject calls out of controllers, and isolates the SDK's quirks.ParseObject::create('ClassName'), set('field', $value), save(); fetch with ParseObject::fetch($id); mutate and save again; delete via destroy(). Parse returns a pointer/object id on save — store that id, not the whole object, in your own DB.ParseQuery::create('Class') then equalTo, greaterThan, containedIn, orderBy, limit, skip, and include for pointer resolution. Batch/find() returns arrays of objects; watch the default limit (100) and paginate explicitly.ParseUser for signup (signUp), login (logIn), and session tokens. Persist the session token server-side and pass it to subsequent requests if you need user-scoped ACLs. For user management from your backend, prefer the master key over re-authenticating as the user.ParseCloud::run('fnName', $params) is the clean way to run validated business logic server-side; prefer it over duplicating rules in PHP.illuminate/* constraints and the bundled parse/php-sdk/Guzzle versions. If a conflict is intractable, the pragmatic move is to drop the bridge and initialize parse/php-sdk yourself in a small custom provider; you'll lose almost nothing.parse.com is dead. Any tutorial or example config pointing at api.parse.com is wrong. Use your own Parse Server and confirm the server_url includes the correct /parse (or custom) mount path — a missing mount path yields confusing 404s.Parse\ParseException on error. Wrap calls in try/catch, distinguish transient (network/5xx) from permanent (validation/object-not-found) failures, and add a small retry policy around saves if your server is flaky.config/parse.php, run php artisan config:clear (and cache:clear). A stale cached config pointing at the wrong server is a common "why is this hitting the old backend" bug.Facade::shouldReceive(...) for unit tests. Assert against your repository wrapper rather than mocking SDK internals.ParseFile accepts a byte payload, a local path, or a URL depending on SDK version; uploaded files require a second save() to attach to an object. Confirm your SDK version's signature — it changed across releases.laravel-parse/parse and parse/php-sdk in composer.json and note the abandoned status in your README so future maintainers aren't surprised.How can I help you explore Laravel packages today?