HEX
Server: nginx/1.28.3
System: Linux lightweb-s1 5.15.0-173-generic #183-Ubuntu SMP Fri Mar 6 13:29:34 UTC 2026 x86_64
User: drdrivek-71 (1047)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: /home/hasdeuac-119/has.deu.ac.kr/app/Fields/BelongsToManyBooleanGroup.php
<?php
namespace App\Fields;

use Illuminate\Support\Collection;
use Laravel\Nova\Fields\BooleanGroup;
use Laravel\Nova\Http\Requests\NovaRequest;

class BelongsToManyBooleanGroup extends BooleanGroup
{
    private string $attributeName;
    private string $targetClass;
    private string $keyAttribute;
    public function __construct($name, $attribute = null, callable $resolveCallback = null, $targetClass = null, $labelAttribute = 'name', $keyAttribute = 'id')
    {
        $this->attributeName = $attribute;

        parent::__construct(
            $name,
            $attribute,
            $resolveCallback ?? static function (Collection $models) {
            return $models->mapWithKeys(function ($model) {
                return [$model->getKey() => true];
            });
        }
        );

        $this->keyAttribute = $keyAttribute;
        $this->targetClass = $targetClass;
        $options = $targetClass::get()->pluck($labelAttribute, $keyAttribute)->toArray();
        $this->options($options);
    }

    /**
     * @param  NovaRequest  $request
     * @param  string  $requestAttribute
     * @param  string  $attribute
     */
    protected function fillAttributeFromRequest(NovaRequest $request, $requestAttribute, $model, $attribute)
    {
        if (! $request->exists($requestAttribute)) {
            return;
        }

        $model->{$this->attributeName}()->detach();

        $targetClass = $this->targetClass;
        $keyAttribute = $this->keyAttribute;
        $attributeName = $this->attributeName;
        collect(json_decode($request[$requestAttribute], true))
            ->filter(static function (bool $value) {
                return $value;
            })
            ->keys()
            ->map(static function ($itemId) use ($model,$targetClass,$keyAttribute,$attributeName) {
                $item = $targetClass::query()->where($keyAttribute, $itemId)->first();
                $model->{$attributeName}()->sync($item, false);

                return $itemId;
            });
    }
}