Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Storage Bundle Laravel Package

paneedesign/storage-bundle

A Laravel storage bundle that simplifies file and disk management. It offers a lightweight layer for handling uploads, storage paths, and common filesystem operations, reducing boilerplate so you can focus on building features rather than wiring up storage logic.

View on GitHub
Deep Wiki
Context7

Getting Started

The only concrete signal in v6.0.3 is a schema change: PR #5 alters the type of the package's url column. Treat this release as a migration-level patch, not a feature drop — the first thing to do is confirm what your database actually looks like after upgrading.

Minimal steps:

  1. composer update to pull v6.0.3.
  2. Publish any new migrations if the package ships them separately:
    php artisan vendor:publish --tag=<package>-migrations
    
  3. Inspect the pending migration before running it:
    php artisan migrate --pretend
    
  4. Run it, then verify the physical column type rather than trusting the changelog:
    Schema::getColumnType('<table>', 'url'); // 'string' | 'text' | ...
    
    or on MySQL: SHOW CREATE TABLE <table>;

Where to look first: the package's migrations directory and the model/cast that maps the url attribute. If the column moved from VARCHAR(255) to TEXT, anything that relied on the old width, on a plain index, or on a max:255 validation rule is now your problem surface.

First use case: take one existing record with a long URL (signed S3 URLs, OAuth callbacks with query strings, tracking links) that previously would have been truncated or rejected, save it, and read it back. That single round-trip tells you whether the column change actually bought you anything in your app.

Implementation Patterns

Wrap the upgrade in a regression check. Before and after the migration, assert on real data:

$record = Model::create(['url' => $longUrl]);
$this->assertSame($longUrl, $record->fresh()->url);
$this->assertSame(strlen($longUrl), strlen($record->fresh()->url));

Truncation is silent on MySQL in non-strict mode, so a passing save() is not proof.

Keep validation aligned with the new column. If the column is now wider, relax the rule deliberately rather than leaving a stale cap:

'url' => ['required', 'url', 'max:2048'], // was max:255

If it is now TEXT, note that max: is a validation guardrail, not a database constraint — don't let it drift to max:65535 just because the column allows it.

Prefer a cast/accessor over raw column reads. Centralise normalisation so a future type change (again) is a one-file edit:

protected function url(): Attribute
{
    return Attribute::make(
        get: fn ($value) => $value,
        set: fn ($value) => rtrim($value), // or URL normalisation
    );
}

Handle the migration on existing rows. A type change on a populated table is not free. On large tables, plan for lock time; on MySQL, ALTER TABLE ... MODIFY may rebuild the table. If the package migration is naive, wrap it in your own ordering or run it during a maintenance window.

Backfill-aware pattern: if the old column was narrower than the new one and any data was previously truncated, the migration cannot recover it. Compare against any upstream source of truth (referrer logs, job payloads) if URL integrity matters.

Integration tip: if you index or unique-constrain the url column, re-check the index after the type change — MySQL cannot index a TEXT column without a prefix length, and utf8mb4 index byte limits (3072) bite at ~768 characters. If uniqueness on full URLs is a requirement, an explicit url_hash (e.g. sha256) column with a unique index is more robust than indexing a variable-width string.

Gotchas and Tips

  • "Change type url column" is ambiguous and that is the risk. The changelog does not say from what to what. Read the migration file in vendor/ before running migrate in production; do not infer from the version bump.
  • Patch version, schema impact. Semver says a patch shouldn't break you, but a migration always can. Treat v6.0.3 as needing a deploy window even though the number looks benign.
  • Index loss is silent. If the migration drops and recreates the column, indexes and foreign keys may not survive. Diff SHOW CREATE TABLE before/after.
  • SQLite and Postgres behave differently. SQLite ignores VARCHAR length entirely, so a "widening" change may be a no-op locally and a real ALTER in production — your local tests will not catch it. Postgres varchar(n) → text is a metadata-only change and effectively instant; MySQL is not.
  • Rollback may not restore data. down() can revert the column type but cannot restore rows that were truncated on the way in. Snapshot the table (or at least SELECT MAX(LENGTH(url))) before migrating.
  • Debugging tip: if writes start failing after upgrade with 1406 Data too long or String data, right truncated, the column change did not apply — check that the package migration is actually registered in migrations table and not shadowed by your own earlier migration that redefines the same column.
  • Extension point: if you need a different width than the package chose, publish the migration and edit it, then delete the package's copy — otherwise a future package release will re-alter the column underneath you.
  • Version-pin if you can't migrate yet. Given the thin release note, "<vendor>/<package>": "6.0.2" is a reasonable hedge until you've read PR #5's diff.
  • Watch for follow-ups. A one-line column-type change in a patch release often precedes a 6.0.4 correcting an index or default that the first PR missed. Check the issue tracker for reports against 6.0.3 before rolling wide.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core