【问题标题】:Laravel - How to identify which model (out of two) via single html select optionLaravel - 如何通过单个 html 选择选项识别哪个模型(两个模型)
【发布时间】:2020-04-25 21:49:08
【问题描述】:

我在选择中向用户列出类别和子类别。如果类别有子类别,则禁用父类别以被选中。在某些情况下,类别没有任何子类别。所以类别和子类别列在同一个选择中。

在我的控制器方面,我有两个模型(类别和子类别)。我如何确定选择? (无论是类别还是子类别)

【问题讨论】:

    标签: php laravel html-select


    【解决方案1】:

    您可以通过几种不同的方式来处理。

    例如,给子类别一个带有 sub_category_ 前缀的值,并在控制器中检查所选值是否包含字符串 sub_category_,如下所示。

    <option disabled>{{ $element->title }}</option>
    @foreach($element->subcategories as $subcategory)
        <option value ="sub_category_{{$subcategory->id}}">- {{ $subcategory->title }}</option>
    @endforeach
    

    或者您可以将categorysubcategory 放在同一个表中,并带有名为parent_id 的额外标志。

    所有父类别都将该值设置为 0,子类别将在 parent_id 列中具有父类别的 ID。 然后,您可以简单地存储该值而无需任何额外工作。

    【讨论】:

    • 谢谢,我最终做了类似的事情。我像你一样在 value 部分添加了第二个标识符,然后在我的控制器中使用 explode() 函数来完成其余的逻辑。
    【解决方案2】:

    在模型App\Category中设置关系(假设有模型App\Subcategory)s:

    public function subcategories()
    {
        return $this->hasMany('App\Subcategory', 'category_id','id');
    }
    

    获取带有子类别的类别:

    public function getCategories() {
        $elements = Category::with('subcategories')->get();
    
        return view('select', compact('elements'));
    }
    

    在视图中生成选择:

    ...
    <div class="form-group">
        <label for="exampleFormControlSelect1">Example select</label>
        <select class="form-control" id="exampleFormControlSelect">
            @foreach($elements as $element)
                @if(count($element->subcategories) > 0)
                    <option disabled>{{ $element->title }}</option>
                    @foreach($element->subcategories as $subcategory)
                        <option>- {{ $subcategory->title }}</option>
                    @endforeach
                @else
                    <option>{{ $element->title }}</option>
                @endif
            @endforeach
        </select>
    </div>
    ...
    

    【讨论】:

      猜你喜欢
      • 2016-04-06
      • 2017-11-28
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 2019-10-04
      • 2021-06-16
      • 1970-01-01
      相关资源
      最近更新 更多