latevaweb/laravel-query-updater

Easily update Eloquent models from put API requests without losing data

0.1.4 2020-09-10 10:38 UTC

README

Quality Score Code Coverage Build Status StyleCI License: MIT Laravel 6.x

This package allows you to update fields and relations based on a request without losing data not send.

Installation

This package can be used in Laravel 6.0 or higher.

You can install the package via composer:

composer require latevaweb/laravel-query-updater

The service provider will automatically get registered. Or you may manually add the service provider in your config/app.php file:

'providers' => [
    // ...
    LaTevaWeb\QueryUpdater\QueryUpdaterServiceProvider::class,
];

Basic usage

Update model field based on a put or patch request: /users params: ['name' => 'Marc']:

use LaTevaWeb\QueryUpdater\QueryUpdater;

public function __invoke(Request $request, User $user) {
    QueryUpdater::for($user)
        ->updatedFields(['name'])
        ->save();
        
    // update
}

Update model field but keep stored value if parameter is empty or null

use LaTevaWeb\QueryUpdater\QueryUpdater;
use LaTevaWeb\QueryUpdater\KeepStored;

public function __invoke(Request $request, User $user) {
    QueryUpdater::for($user)
        ->updatedFields([
            KeepStored::field('name')
        ])
        ->save();
        
    // update
}

Extending filters

IF you have an special requirement that not fits with our filters KeepStored or SimpleFilter, you can create your own extending LaTevaWeb\QueryUpdater\Filter\AbstractFilter class.

Run tests

sqlite is required. Install it on ubuntu using sudo apt-get install php7.4-sqlite3.

execute vendor/bin/phpunit

License

The MIT License (MIT). Please see License File for more information.