troelskn / laravel-fillable-relations
Provides HasFillableRelations trait to Eloquent models
Installs: 58 454
Dependents: 0
Suggesters: 0
Security: 0
Stars: 65
Watchers: 6
Forks: 24
Open Issues: 9
Requires
- illuminate/database: >=5.3
Requires (Dev)
- mockery/mockery: ^0.9.4
- orchestra/database: 3.3.1
- orchestra/testbench: 3.3
- phpunit/phpunit: ~5.7
This package is not auto-updated.
Last update: 2025-04-25 20:01:57 UTC
README
This library provides a trait for mixing in to an Eloquent Model. Doing so will enable support for fillable relations.
To use, first require in your composer file:
composer require troelskn/laravel-fillable-relations
Then, in your code:
<?php namespace MyApp\Models; use Illuminate\Database\Eloquent\Model; use LaravelFillableRelations\Eloquent\Concerns\HasFillableRelations; class Foo extends Model { use HasFillableRelations; protected $fillable_relations = ['bar']; function bar() { return $this->hasOne(Bar::class); } } class Bar extends Model { use HasFillableRelations; protected $fillable_relations = ['foos']; function foos() { return $this->hasMany(Foo::class); } }
And you can now fill relations, like so:
$foo = new Foo( [ 'cuux' => 42, 'bar' => [ 'id' => 42 ] ] );
Or perhaps:
$foo = new Foo( [ 'cuux' => 42, 'bar' => [ 'name' => "Ye Olde Pubbe" ] ] );
And also:
$bar = new Bar( [ 'name' => "Ye Olde Pubbe", 'foos' => [ [ 'cuux' => 42 ], [ 'cuux' => 1337 ] ] ] );
In order to automatically detach empty relations, pass an empty array:
$bar->fill([ 'foos' => [] // Detach all foos ]); $bar->save();
You can use Laravel validator array rule to preserve empty arrays passed to the request:
class UpdateRequest extends FormRequest { public function rules() { return [ 'foos' => [ 'array', ], ]; } }
And then update attributes and relations in one line in the controller:
public function update(UpdateRequest $request, Bar $bar) { $bar->fill($request->validated())->save(); }