PHP code example of illuminatech / sync-many-attribute
1. Go to this page and download the library: Download illuminatech/sync-many-attribute library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
illuminatech / sync-many-attribute example snippets
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminatech\SyncManyAttribute\SyncManyToManyAttribute;
/**
* @property int[] $category_ids
* @property int[] $tag_ids
*/
class Item extends Model
{
use SyncManyToManyAttribute;
protected function syncManyToManyAttributes(): array
{
return [
'category_ids' => 'categories',
'tag_ids' => 'tags',
];
}
public function categories(): BelongsToMany
{
return $this->belongsToMany(Category::class);
}
public function tags(): BelongsToMany
{
return $this->belongsToMany(Tag::class)->withPivot(['created_at']);
}
// ...
}
$item = new Item();
$item->category_ids = Category::query()->pluck('id')->toArray();
// ...
$item->save(); // relation `Item::categories()` synchronized automatically
$item = $item->fresh();
var_dump($item->category_ids); // outputs array of category IDs like `[1, 3, 8, ...]`
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class KioskController extends Controller
{
public function store(Request $request)
{
$validatedData = $request->validate([
'name' => ['],
]);
$item = new Item;
$item->fill($validatedData); // single assignment covers all many-to-many relations
$item->save(); // relation `Item::categories()` synchronized automatically
// return response
}
}
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminatech\SyncManyAttribute\SyncManyToManyAttribute;
class Item extends Model
{
use SyncManyToManyAttribute;
protected function syncManyToManyAttributes(): array
{
return [
'category_ids' => [
'categories' => [
'type' => 'help-content',
],
],
'tag_ids' => [
'tags' => [
'attached_at' => function (Item $model) {
return now();
}
],
],
];
}
public function categories(): BelongsToMany
{
return $this->belongsToMany(Category::class)->withPivot(['type']);
}
public function tags(): BelongsToMany
{
return $this->belongsToMany(Tag::class)->withPivot(['attached_at']);
}
// ...
}
use Illuminate\Database\Eloquent\Model;
use Illuminatech\SyncManyAttribute\ManyToManyAttribute;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminatech\SyncManyAttribute\SyncManyToManyAttribute;
class Item extends Model
{
use SyncManyToManyAttribute;
protected function syncManyToManyAttributes(): array
{
return [
'category_ids' => (new ManyToManyAttribute)
->relationName('categories')
->pivotAttributes(['type' => 'help-content']),
'tag_ids' => (new ManyToManyAttribute)
->relationName('tags')
->pivotAttributes([
'attached_at' => function (Item $model) {
return now();
},
]),
];
}
public function categories(): BelongsToMany
{
return $this->belongsToMany(Category::class)->withPivot(['type']);
}
public function tags(): BelongsToMany
{
return $this->belongsToMany(Tag::class)->withPivot(['attached_at']);
}
// ...
}
use Laravel\Nova\Resource;
use Laravel\Nova\Fields\ID;
use Fourstacks\NovaCheckboxes\Checkboxes;
class Item extends Resource
{
public static $model = \App\Models\Item::class; // uses `SyncManyToManyAttribute` for 'categories'
public function fields(Request $request)
{
return [
ID::make()->sortable(),
// ...
// use single checkbox list input instead of `\Laravel\Nova\Fields\BelongsToMany`:
Checkboxes::make(__('Categories'), 'category_ids')
->options(\App\Models\Category::pluck('name', 'id')),
];
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.