在 laravel nova 中的关系中创建关系

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

我有一个名为“产品”的模型。该产品与一个类别相关联,每个类别都有许多功能。此外,每个功能都有相当数量的功能项。

我想在 Laravel 中实现一个功能,当用户想要创建一个产品并选择一个类别时,应该显示相关的功能及其功能项。然后,用户可以指定每个功能的特征。

例如: 如果产品是“服装”类别中的服装,则特征之一可能是“尺寸”或“材质”。 “材料”特征可能具有“羊毛”或“棉花”等特征项。用户应该能够在创建产品时指定这些详细信息。

我的模型:产品、类别、特征、feature_category 和 feature_item_product;

php laravel package laravel-nova laravel-10
1个回答
0
投票

首先确保模型之间的所有关系都正确形成。考虑到您共享的模型,这些应该是您必须建立的关系:

  • A
    Product
    属于
    Category
  • 一个
    Category
    有很多
    FeatureCategory
  • 一个
    FeatureCategory
    有很多
    Feature
  • 一个
    Feature
    有很多
    FeatureItem
  • 一个
    Product
    有很多
    FeatureItemProduct

控制器逻辑:

在控制器中,当您处理产品的创建时,检索必要的数据以传递到视图。例如:

public function create()
{
    $categories = Category::all();
    // Load other necessary data like features, feature categories, etc.

    return view('products.create', compact('categories', 'otherData'));
}

查看

然后在您应该处理创建的视图中,您可能需要一些 javascript 和 AJAX 调用来获取与类别相关的数据,如下所示:

<!-- Your form code -->

<div class="form-group">
    <label for="category">Category</label>
    <select id="category" name="category_id">
        @foreach($categories as $category)
            <option value="{{ $category->id }}">{{ $category->name }}</option>
        @endforeach
    </select>
</div>

<!-- Add divs/spans to hold dynamic feature and feature item fields -->

<script>
    $(document).ready(function () {
        $('#category').on('change', function () {
            var categoryId = $(this).val();

            // Make an AJAX request to fetch features and feature items based on the selected category
            $.ajax({
                url: '/get-features/' + categoryId,
                type: 'GET',
                success: function (data) {
                    // Update the UI with the retrieved data (e.g., add input fields dynamically)
                    // Use jQuery or vanilla JavaScript to manipulate the DOM
                },
                error: function () {
                    // Handle errors
                }
            });
        });
    });
</script>

AJAX 调用

在 web.php 中定义路由

Route::get('/get-features/{category}', 'ProductController@getFeatures');

现在在您的 ProductController 中:

public function getFeatures(Category $category)
{
    // Retrieve features and feature items based on the selected category
    $features = $category->features()->with('featureItems')->get();

    return response()->json($features);
}

根据您的具体要求进行调整。

商店

最后将创建的数据存入数据库

public function store(Request $request)
{
    // Validate and store product data

    // Attach features and feature items to the product
}

这不是您的用例的实际实现,如果不进行修改可能无法直接工作。这个解决方案只是为您提供实际实现的基本思路。

© www.soinside.com 2019 - 2024. All rights reserved.