父子类别不只保存类别

问题描述 投票:0回答:1

我有一个类别、父类别和子类别。当我选择一个类别时,我保存它,但是当我在图像中选择父项或子项时,该类别会保存类别所有者并将其全部收集在框1中。他在选择父项或子项时选择全部,所以我想要仅选择 1 个,而不是全部。

检查图像(https://i.ibb.co/1LmpbvW/error-category.jpg

刀片

<div class="form-group col-md-3">
    <label>@lang('Categories')</label>
    <select class="select2-multi-select form-control" name="categories[]" id="categories" multiple required">
        @foreach ($categories as $category)
            <option value="{{ $category->id }}">@lang($category->name)</option>
            @php
                $prefix = '--';
            @endphp
            @foreach ($category->allSubcategories as $subcategory)
                <option value="{{ $subcategory->id }}">
                    {{ $prefix }}@lang($subcategory->name)
                </option>
                @include('admin.partials.subcategories', [
                    'subcategory' => $subcategory,
                    'prefix' => $prefix,
                ])
            @endforeach
        @endforeach
    </select>
</div>

<script>
    'use strict';
    (function($){

        var dropdownParent = $('.has-select2');

        $('select[name="category_id"]').on('change', function () {
            var subcategories = $(this).find(':selected').data('subcats');
            var output= `<div class="col-md-2">
                            <label class="font-weight-bold">Subcategory</label>
                        </div>
                        <div class="col-md-10">
                            <select class="form-control select2-basic" name="sub_category_id">
                            <option value="" selected disabled>@lang('Select One')</option>
                        </div>
                        `;
            if (subcategories.length != 0) {
                $.each(subcategories, function (key, val) {
                    output += `<option value="${val.id}">${val.name}</option>`;
                });
                output += `</select>`
                $('#sub-categories-div').html(output);
            }
        });

        @if (request() -> routeIs('admin.products.edit'))

            var categories = [];
            @if($product->categories)
                categories = @json($product->categories->pluck('id'));
            @endif
            $('#categories').val(categories);

            $('.select2-multi-select').select2({
                dropdownParent: dropdownParent,
                closeOnSelect: false
            });

        @endif


    })(jQuery)

</script>

型号分类

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Category extends Model
{
    use SoftDeletes;
    protected $guarded  = ['id'];

    public function subcategories()
    {
        return $this->hasMany(Category::class, 'parent_id')->orderBy('name');
    }

    public function allSubcategories()
    {
        return $this->subcategories()->with('allSubcategories');
    }


    public function products()
    {
        return $this->belongsToMany(Product::class, 'products_categories', 'category_id', 'product_id');
    }
}

控制器

public function editProduct($id)
{
    $data['product'] = Product::whereId($id)->first();
    $data['categories'] = Category::with('allSubcategories')->where('parent_id', null)->get();
    $data['pageTitle'] = "Edit Product";
    
    return $data;
}
php mysql laravel laravel-8 laravel-blade
1个回答
0
投票

在 Blade 文件中,类别选择框称为

categories[]
。确保事件处理程序对应于正确的选择元素。

将事件处理程序更新为:

$('select[name="categories[]"]').on('change', function () {...}
© www.soinside.com 2019 - 2024. All rights reserved.