繁体   English   中英

拉拉维尔 | 三个表之间的多对多关系 - 保存来自两个数组的数据

[英]LARAVEL | Many-To-Many Relationship Between Three Tables - saving data from two arrays

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

数据库模型截图

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

project_subcategory数据透视表中插入的数据示例

我知道多对多关系应该只在两个表之间,而且 Laravel 文档建议的多对多多态方法乍一看似乎是解决这个问题的方法; 然而,在尝试了这种方法之后,我认为它在我的情况下不起作用,这就是我在这里问的原因——在花了很多时间试图解决这个问题并做了大量研究之后。

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

如果有什么不合理的地方,或者我需要进一步解释,请告诉我。

任何帮助都感激不尽!

PS:查看我需要实现的示例

我设法找到了解决我的问题的方法 - 因此,我原来的问题得到了解答。 我将在这里解决我为解决问题所做的工作,希望对面临类似情况的人有所帮助。

我所做的不是尝试从两个不同的数组(子类别和供应商)插入,而是从视图中将它们组合成一个数组。 然后通过使用 foreach 循环,我提取了子类别 ID(键)和供应商 ID(值)。 然后使用 Laravel 'attach' 方法插入到project_subcategory表中。

//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

希望这可以帮助某人!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM