jelte-ten-holt/in-other-shops
A Laravel package for managing “in other shops” product availability. Register shops and product URLs, associate them with your catalogue, and render alternative retailer listings via a clean, configurable API. Useful for price comparison and marketplace-style product pages.
bianka). Every order show/edit page in bianka's order admin is currently 500ing. This release is the fix, not a workaround — so it directly informs the "ship a hotfix now vs. wait for the next scheduled release" call. Recommendation: cut a patch release and bump bianka immediately; the blast radius of leaving it is an unusable back-office.docs/periphery.md → "Catalog text is not a column"). This is the deciding evidence that one shared package can serve both column-backed catalogs (in-other-worlds) and translations-table catalogs (bianka) — avoid forking the order admin per consumer.Support\ModelLabel::for(Model): string (resolves name → title → label → slug → "{alias} #{id}", never null, never empty) is a small, stable primitive. PM decision: mandate it for all display-label rendering in admin, storefront and any outbound comms (emails, exports, receipts) to prevent a class of "blank product name" bugs that are invisible in tests but visible to customers.{alias}:{id} option-key format are unchanged, and changes are additive for in-other-worlds. That keeps upgrade cost near zero for column-backed consumers — useful when sequencing upgrades across multiple site teams.Adopt / bump now when:
name/description in a translations table (or any non-column source) and you use this package's order admin or storefront listing. Without this release those pages 500 — this is mandatory, not optional.?? $model->id fallbacks.Look elsewhere or wait when:
getAttribute(); audit any code that assumed where('name', …) worked, since that assumption was never contractual.To executives: A live production outage in one of our sites — the order admin is throwing 500s on every order page, which blocks order handling — is fixed by a small, additive package release. The underlying flaw was that the shared package assumed product names live in database columns; one of our catalogs stores them in a translations table, so query-level reads failed. The fix removes that assumption permanently and adds a guaranteed-non-empty label resolver, so we don't re-litigate this per site. Risk is low: no signature changes, nothing removed, and the other site is unaffected. Action: bump the affected site now.
To engineering: Two query-level reads were the fault — pluck('name', 'id') in CommerceSchema::buildOrderableOptions() and where('name'/'description','like') / orderBy('name') in ListBrowsables. Model-level access was always fine; the contract never promised a column. Both are replaced by attribute-based resolution, with Support\ModelLabel::for() as the new public entry point. 1065 tests (+10), including the missing translatable-cartable fixtures and the first tests for ListBrowsables. Critical caveat: SQLite cannot reproduce this failure, so a green suite is not proof — verify against MySQL with real consumer data before closing, and treat a MySQL CI job as follow-up work. Bump bianka immediately; in-other-worlds can take it on the normal cadence.
How can I help you explore Laravel packages today?