Php LARAVEL |三个表之间的多对多关系-从两个数组保存数据

Php LARAVEL |三个表之间的多对多关系-从两个数组保存数据,php,html,mysql,laravel,Php,Html,Mysql,Laravel,我希望具有PHP/Laravel和数据库设计高级经验的人能够指导我朝着正确的方向前进。 我拥有以下数据库关系,并且拥有除pivot表以外的所有数据库的模型 我的问题是,我无法将至少一个或多个供应商的子类别与其项目关联起来。我想将此类记录保存到project_子类别表中。我可以很容易地将其手动保存到数据库中,但由于我从视图中的两个不同阵列(子类别和供应商)获取数据,因此很难将数据正确保存到数据库中 我知道多对多关系应该只在两个表之间,Laravel docs建议的多对多多态方法乍一看似乎是解决

我希望具有PHP/Laravel和数据库设计高级经验的人能够指导我朝着正确的方向前进。 我拥有以下数据库关系,并且拥有除pivot表以外的所有数据库的模型

我的问题是,我无法将至少一个或多个供应商的子类别与其项目关联起来。我想将此类记录保存到project_子类别表中。我可以很容易地将其手动保存到数据库中,但由于我从视图中的两个不同阵列(子类别和供应商)获取数据,因此很难将数据正确保存到数据库中

我知道多对多关系应该只在两个表之间,Laravel docs建议的多对多多态方法乍一看似乎是解决这个问题的方法;然而,在尝试了这种方法之后,我认为它在我的案例中不起作用,这就是为什么我在这里提出这个问题——在花了很多时间试图解决这个问题并做了大量研究之后

同样,我所需要做的就是为一个项目分配多个子类别和一个或多个供应商。换句话说,一个项目可以有许多子类别分配给它,每个子类别可以有许多供应商分配给它。此供应商列表是从子类别\u供应商表生成的

请让我知道,如果有什么是不合理的,或者如果我需要进一步解释这一点

任何帮助都将不胜感激


注:

我已经设法找到了解决问题的方法,因此,我最初的问题得到了回答。 我把我为解决这个问题所做的工作留在这里,希望它能对面临类似情况的人有所帮助

我所做的不是尝试从两个不同的数组(子类别和供应商)插入,而是从视图中将它们组合到一个数组中。 然后通过使用foreach循环,我提取了子类别ID(key)和供应商ID(value)。然后使用Laravel“连接” 方法I插入到项目_子类别表中

//Insert records to the project_subcategory table.
        if ($request->subcategories_suppliers != null) {
            //dd($request->subcategories_suppliers);

            //The array containing the subcategories as the array key and the suppliers ids as the array value
            $array = $request->subcategories_suppliers;

            //Detach all records from project_subcategory before updating
            $project->subcategories()->detach();
            //Loop throuh $array to obtain the id for the subcategory and the array with all the suppliers ids
            foreach ($array as $subcategory => $suppliers) {
                //Loop through $suppliers to get each supplier's id
                foreach ($suppliers as $supplierID) {
                    //Attach values into the pivot table project_subcategory
                    $project->subcategories()->attach([$subcategory => ['supplier_supplierID' => $supplierID]]);
                }
            }
以下是html刀片视图中的一些代码:

 @foreach($subcategory->suppliers as $supplier)
                                        <div class="form-check d-none suppliers-list{{$subcategory->subcategoryID}}"
                                            id="">
                                            <input type="hidden" name="subcategory_name"
                                                value="{{$subcategory->subcategoryID}}" />
                                            <input class="form-check-input" type="checkbox"
                                                value="{{$supplier->supplierID}}"
                                                **name="subcategories_suppliers[{{$subcategory->subcategoryID}}][]"**
                                                @if(in_array($supplier->supplierID,
                                            old('subcategories_suppliers',
                                            $project->subcategories()->pluck('supplier_supplierID')->toArray())) && in_array($subcategory->subcategoryID, $project->subcategories()->pluck('subcategory_subcategoryID')->toArray()))
                                            checked
                                            @endif>
                                            <label class="form-check-label" for="defaultCheck1">
                                                <b>{{$supplier->supplier_name}}</b>
                                            </label>
                                        </div>
                                        @continue
                                        @endforeach
@foreach($subcategory->suppliers as$supplier)
供应商,
旧('子类别\供应商',
$project->subcategories()->pulk('supplier\u supplierID')->toArray())和&in_数组($subcategory->subcategorid,$project->subcategories()->pulk('subcategory\u subcategoriid')->toArray())
选中的
@endif>
{{$supplier->supplier_name}
@继续
@endforeach

希望这能帮助别人

我认为项目_子类别和供应商之间的关系是不必要的。您可以通过子类别获得一个项目的所有供应商。@SUGUSNK-非常感谢您的评论。但这是我最初开始的方式。项目和子类别之间存在多对多关系,但我找不到将选定供应商与特定子类别关联的方法。请问您对如何实现这一目标有何建议?非常感谢您的反馈。我想核实一下,供应商是否有许多子类别?无论如何,回答您的问题“但我无法找到将所选供应商与特定子类别关联的方法。”,您可以使用子类别_supplier获取供应商的子类别,V.V.@sugusnk感谢您对sugusnk的评论。子类别可以有许多供应商。我知道我可以使用“subcategory_supplier”透视表轻松获取子类别的所有供应商。那根本不是我的问题。我面临的问题是,我需要能够将子类别和特定供应商链接到项目。而且,每个项目可以有许多子类别,但并非所有链接到子类别的供应商都必须附加到项目。它可以是一个或多个,但不是全部。