This package is old... i found that create a select2 for laravel its very simple, checkout this git https://gist.github.com/blockpc/5878e8d02b1fa33a9e13ab912e9a6440 now the gist is old version, but how to explain depends each one, the basic is the same
This package create a select2 livewire component via commands. The package is built under a TALL stack. Make sure you have the requirements (see composer.json) One command creates a livewire component as well as its view, plus it gives you the option to create a trait to receive basic events on a parent component.
composer require blockpc/select2-wire
Single component Create a component that works as a single selectable, allows you to add data on the fly
php artisan select2:single
Multiple component Create a component that works as a multiple selectable, allows you to add data on the fly, data must be separated by commas
php artisan select2:multiple
Delete component This commando delete a component created
php artisan select2:delete
php artisan select2:single foo
This command create a single
component select2 class (under directory app Livewire/Select2/FooSelect2.php
) and one view (under directory resource livewire/select2/foo-select2.blade.php
) with a model Foo
related.
php artisan select2:single foo --model=baz
# or
php artisan select2:single foo -m baz
This command create a single
component select2 class (under directory app Livewire/Select2/FooSelect2.php
) and one view (under directory resource livewire/select2/foo-select2.blade.php
) with a model Baz
related.
This is the suggested command. It has the same behavior as the others but adds some events (and listeners) that allow you to interact with a foreign component (ex CRUD). It also allows you to create a trait to help you in this.
php artisan select2:single foo --model=baz --parent=taz
# or
php artisan select2:single foo -m baz -p taz
This command create a single
component select2 class (under directory app Livewire/Select2/FooSelect2.php
) and one view (under directory resource livewire/select2/foo-select2.blade.php
) with a model Baz
related and parent model Taz
, Gives you the option to create a trait if you need to interact with an external component (under directory app Livewire/Select2/Traits/SingleSelect2.php
)
php artisan select2:multiple foo
This command create a multiple
component select2 class (under Livewire/Select2/FooSelect2.php
directory app) and one view (under directory resource livewire/select2/foo-select2.blade.php
) with a model Foo
related.
php artisan select2:multiple foo --model=baz
# or
php artisan select2:multiple foo -m baz
This command create a multiple
component select2 class (under directory app Livewire/Select2/FooSelect2.php
) and one view (under directory resource livewire/select2/foo-select2.blade.php
) with a model Baz
related.
This is the suggested command. It has the same behavior as the others but adds some events (and listeners) that allow you to interact with a foreign component (ex CRUD). It also allows you to create a trait to help you in this.
php artisan select2:multiple foo --model=baz --parent=taz
# or
php artisan select2:multiple foo -m baz -p taz
This command create a multiple
component select2 class (under directory app Livewire/Select2/FooSelect2.php
) and one view (under directory resource livewire/select2/foo-select2.blade.php
) with a model Baz
related and parent model Taz
, Gives you the option to create a trait if you need to interact with an external component (under directory app Livewire/Select2/Traits/MultipleSelect2.php
)
Our company sells vehicles and each vehicle has one code, a brand and can be in various colors.
From what has been read above we understand that we have a parent model called vehicle
. And each one has properties like one name, one brand and could be has many colors.
In the example directory you find all files you needs for this tutorial
The model brand
have a relation one-to-one with parent model vehicle
One vehicle has one brand
This relation we called like single
relation
The model color
have a relation many-to-many with parent model vehicle
One vehicle has many colors and one color can be set in many vehicles
This relation we called like multiple
relation
For a multiple
relation we need a migration that creates the table that contains the foreign keys for color
and vehicle
models
php artisan make:migration create_color_vehicle_table
you find all the migrations in example directory
run mingrations
So, your parent model vehicle
should look like this
class Vehicle extends Model
{
// ...
protected $fillable = ['code'];
// one-to-one brand
public function brand(): BelongsTo
{
return $this->belongsTo(Brand::class);
}
// many-to-many colors
public function colors(): BelongsToMany // Dont forget import this class
{
return $this->belongsToMany(Color::class);
}
}
Your single relation brand
should look like this:
class Brand extends Model
{
// ...
protected $fillable = ['name'];
// one-to-many vehicles
public function vehicles(): HasMany // Dont forget import this class
{
return $this->hasMany(Vehicle::class);
}
}
Your multiple relation colors
should look like this:
class Color extends Model
{
// ...
protected $fillable = ['name'];
// One color has many vehicle
public function vehicles(): BelongsToMany // Dont forget import this class
{
return $this->belongsToMany(Vehicle::class);
}
}
After this, we need a route and one controller
php artisan make:controller VehiclesController -i
We run two commands
And we make sure to accept the creation of the traits. Then we add the components we created to use in the controller view. you can see the example and how it was structured.
enjoy
Do you like this project? Support it by donating
Select2-Wire is open-sourced software licensed under the MIT license.