sertxudeveloper / laravel-media-model
Attach media files to your models
Fund package maintenance!
sertxudev
buymeacoffee.com/sertxudeveloper
Installs: 2 955
Dependents: 0
Suggesters: 0
Security: 0
Stars: 11
Watchers: 1
Forks: 0
Open Issues: 1
Requires
- php: ^8.1|^8.2
- illuminate/contracts: ^10.0|^11.0
- illuminate/database: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^9.5|^10.0
This package is auto-updated.
Last update: 2024-12-07 09:39:30 UTC
README
Attach media files to your models
When developing an app, you may want to attach media files to your models, such as images, videos, or documents. With this package, you can easily attach media files to your models.
The media files are stored in the specified disk and are related to the model using your database.
You can link local media files or remote ones without needing to download them to your server.
The main difference between this package and the other ones available is that this package allows you to relate media files to your models using a custom table per model.
Allowing you to manage the media tables per model instead of one unique media table for all models.
Installation
You can install the package via composer:
composer require sertxudeveloper/laravel-media-model
Next, you should publish the config file and the migrations:
php artisan vendor:publish --provider "SertxuDeveloper\Media\MediaServiceProvider"
After that, you can run the new migrations:
php artisan migrate
Finally, you can start using the package!
Usage
You should modify the model that you want to attach media files to.
<?php namespace App\Models; use SertxuDeveloper\Media\HasMedia; use SertxuDeveloper\Media\Interfaces\MediaInteraction; class Message extends Model implements MediaInteraction { use HasMedia; }
As you can see, the model has been modified to use the HasMedia
trait.
Also, the model must implement the MediaInteraction
interface.
Separated media tables
If you want to use a separated media table for each model, you should modify the model that you want to attach media files to.
<?php namespace App\Models; use SertxuDeveloper\Media\HasMedia; use SertxuDeveloper\Media\Interfaces\MediaInteraction; class Message extends Model implements MediaInteraction { use HasMedia; public function getMediaTable(): string { return 'messages_media'; } }
The specified table needs to be created, you can create it manually or use one of the following command.
php artisan media:create-table messages_media
or
php artisan media:create-table messages
or
php artisan media:create-table "App\Models\Message"
Attaching media files
Once you configured the model, you can attach media files to it. For example:
Note
If you don't specify a disk, the default disk will be used.
<?php $message = Message::find(1); $message->addMediaFromDisk(path: '/images/image.jpg', disk: 'public');
You can also attach a remote file:
Note
This will not download the file to your server. It will only add the remote file path to the database.
<?php $message = Message::find(1); $message->addMediaFromUrl('https://www.sertxudeveloper.com/assets/logo.svg');
Also, you can attach a file content, this will save the file to the disk and attach it to the model.
Note
This is useful if you get the content of a file from an external source, like as an email attachment read by a mail parser.
<?php $message = Message::find(1); $message->addMediaFromContent( content: file_get_contents('/tmp/tmpA3ds2'), originalName: 'image.jpg', toFolder: 'avatars', toDisk: 'public' );
Testing
This package contains tests, you can run them using the following command:
composer test
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.
Copyright © 2022 Sertxu Developer