obuchmann/odoo-jsonrpc
A Laravel package for communicating with Odoo ERP over its JSON-RPC API. It provides a clean, fluent PHP interface to authenticate and query, create, update, and delete Odoo records, making backend integration simple within Laravel applications.
Architecture fit. obuchmann/odoo-jsonrpc is an adapter layer between a Laravel application and Odoo ERP, speaking Odoo's JSON-RPC endpoints and presenting Odoo records through an Eloquent-like model interface. The v1.9.1 patch touches the dehydration pipeline — the write-back path that serializes a hydrated model graph (including nested relations) into Odoo's expected payload. That this is the defect location is architecturally informative: the package's core value proposition is bidirectional relational mapping, not just read-only querying. Foreign-key fields arriving as arrays were producing payloads Odoo rejected; the fix normalizes that shape before submission.
Integration feasibility. Very low effort. Single-commit patch release from v1.9.0, no API surface change signaled in the notes, no deprecations, no config changes. Upgrade is composer update plus a regression pass on any code path that writes relational data.
Technical risk. Low at the release level, but the release illuminates a persistent risk class. Odoo's x2many protocol requires specific tuple encodings — (0, 0, values) for create, (6, 0, [ids]) for replace, and so on — and many2one fields expect a scalar ID, not an array. Any mismatch is a runtime failure detected by Odoo's ORM, not by PHP's type system. That means these bugs escape unit tests and surface in staging or production as opaque validation faults. Secondary risks: Odoo version drift across majors, JSON-RPC session/authentication lifecycle handling, and the absence of a transaction spanning Laravel and Odoo.
Key questions.
create and update dehydration paths, and both one2many and many2many?Stack fit. Laravel 8–11 on PHP 8.x, standard service-provider and config-publish registration, credentials for host/database/user in config or env. The natural deployment shape is Laravel as the UX, workflow, and integration-orchestration layer, with Odoo as system of record for ERP entities. This package is the correct seam for that pattern rather than hand-rolling RPC calls.
Migration path. If already on v1.9.0, take the patch (composer update obuchmann/odoo-jsonrpc) and re-run whatever dehydration coverage exists. If evaluating fresh, pin to ^1.9 and treat the constraint as a deliberate choice — do not float to * on a single-maintainer dependency.
Compatibility. No breaking changes indicated at patch level. The real compatibility axis is the Odoo side, not the Laravel side: verify against the specific Odoo major version in use, and re-verify on Odoo upgrades independently of package version bumps.
Sequencing.
Maintenance. Small, focused dependency with a single maintainer. Treat it as a watch-list dependency: budget recurring time to read each diff, because changelog entries are terse and bug-fix releases here can encode non-obvious behavioral corrections.
Support. Community-only — GitHub issues, no SLA, no vendor escalation path. Mitigation: wrap all package interaction behind an internal repository/gateway interface so a fork, a patch, or a swap to direct HTTP calls remains containable rather than spreading Odoo RPC semantics across the codebase.
Scaling. JSON-RPC is synchronous and per-call, and dehydration of a model graph can degenerate into N+1 round trips. Push bulk operations to queued jobs, prefer batched writes where the package exposes them, and watch Odoo worker/thread limits, request timeouts, and payload sizes. This is a throughput ceiling of the integration architecture, not something a patch release alters.
Failure modes. The dominant ones: partial writes with no distributed transaction (Odoo commits per RPC call, so a mid-graph failure leaves inconsistent state); session expiry mid-operation; Odoo access-rights or validation errors surfacing as generic faults rather than typed exceptions; and exactly the field-shape mismatch class fixed here — silent until Odoo rejects the payload. Retry logic is hazardous without idempotency keys, since a retried create produces duplicates.
Ramp-up. An engineer comfortable with Eloquent and Odoo's data model needs a few days to be productive; the genuine learning curve is Odoo's relational command protocol and what "dehydration" actually does to a model graph, not the Laravel integration itself. Document the write-back semantics and supported Odoo versions internally — the upstream docs are unlikely to cover the edge cases this release just exposed.
Assessment caveat. This evaluation is derived from a single patch-level release note; no prior assessment, benchmark data, or repository inspection was available. The risk ratings above should be re-validated against the actual dependency tree, CI setup, and Odoo version matrix before any go/no-go decision.
How can I help you explore Laravel packages today?