【问题标题】:PHP Laravel - using jQuery to access mysql databasePHP Laravel - 使用 jQuery 访问 mysql 数据库
【发布时间】:2021-03-12 17:13:10
【问题描述】:

我遇到了问题。 我的数据库相当复杂。

对于问题,使用了下表:

  • product - 包含产品详细信息。例如鞋
  • productattribute - 包含产品的不同变体。例如黑色,尺寸 12。产品密钥在此表中
  • productsupplier - 包含特定产品属性的特定供应商。例如,黑色鞋,12 号可以由多个供应商提供。所以productattribute key在product supplier中。
  • PO - 采购订单。 PO 是特定于供应商的。产品供应商密钥就在其中。

希望数据库关系清晰。

所以我正在制作采购订单表格。 在步骤 1 中,用户将选择供应商。如图所示

当他们单击下一步时,将显示与该供应商相关的所有产品。如图所示

接下来我要做的是,当他们单击任何名称时,会显示 productattribute 表的数据。它带有其他属性,如颜色、大小等。这里将使用 jquery,我不是 jquery 用户,所以我遇到了麻烦。

在 PHP 后端,我将产品名称分组到一个数组中。我这样做是因为在我显示上图的下拉列表中,我希望每个产品的名称只显示一次,而不是像属性一样多。所以我对产品进行了分组。以下是数组和分组的代码:

public function new_po_next(Request $request)
    {
        $product = array();
        $supplier = \App\supplier::where('user_id', $request->supplier)->first();
        $productsupplier = \App\productsupplier::where('supplier_id', $supplier->id)->get();
        foreach ($productsupplier as $ps)
        {
            $productattribute = \App\productattribute::where('id', $ps->productattribute_id)->first();

                $prod = \App\product::where('id', $productattribute->product_id)->first();

                    $product [] = [
                        'prod_supp_id' => $ps->id,
                        'prod_supp_prodattid' => $ps->productattribute_id,
                        'prod_supp_cost' => $ps->cost,
                        'prod_att_id' => $productattribute->id,
                        'prod_att_color' => $productattribute->color_id,
                        'prod_att_size' => $productattribute->size_id,
                        'prod_att_material' => $productattribute->material_id,
                        'prod_att_prodid' => $productattribute->product_id,
                        'prod_id'=>$prod->id,
                        'prod_name' =>$prod->name,
                    ];
        }
        $productCollection = collect($product);
        $groupedProductCollection = $productCollection->groupBy('prod_name');

        $groupedProduct = $groupedProductCollection->all(); // all method will convert it back to array

       // var_dump($groupedProduct);die();
        $status = $request->status;
        $deldate = $request->deldate;
        $discount = $request->discount;
        return view("vendor.new-po-next")->with('status', $status)
            ->with('deldate', $deldate)->with('discount', $discount)->with('product', $product)->with('groupedProduct', $groupedProduct);
    }


然后在刀片中,我显示如下:

<select name="product_name" id="product_name">
                                                <option selected="true" disabled="disabled">Choose Product</option>.
                                                    @foreach(array_keys($groupedProduct) as $prod_name)
                                                        <option value="{{ $groupedProduct[$prod_name]}}"> {{$prod_name}} </option>
                                                    @endforeach
                                            </select>

现在它的 javascript/jquery 代码如下:

 $('select').on('change', function() {
               var prodName = $('#product_name').find(":selected").text();

我还没有走得更远。 接下来我需要做的是使用 prodName 访问 productattribute 表,以便检索特定产品的所有属性/变体并显示一个表,用户可以通过该表选择他们需要的变体。

有人可以帮忙吗? 如果有什么不明白的,请告诉我。 如果您理解它,请告诉我应该如何进一步处理。

非常感谢!

【问题讨论】:

    标签: javascript php jquery mysql laravel


    【解决方案1】:

    希望我理解了你的问题,但是你可以通过ajax发出请求来解决,它会根据名称返回产品属性。

     $('select').on('change', function() {
         var prodName = $('#product_name').find(":selected").text();
         var token =  $('#_token').val().
         $.ajax({
             url:'/ruta',
             data:{
                _method: 'get', 
                _token : token,
                'prodName': prodName
             },
             type:'get',
             success:  function (response) {
                console.log(response);
                //HERE WOULD GO THE LOGIC TO PLACE THE INFORMATION IN YOUR FORM from the response
             },
             error:function(x,xs,xt){
                console.log('error: ' + JSON.stringify(x) +"\n error string: "+ xs + "\n error throwed: " + xt);
             }
          });
    })
    

    然后您将创建获取类型路径,并在您的控制器中创建接收该请求并返回数据的函数,建议采用 * json * 格式。

    return response()->json(['data' => $data]);
    

    ** 注意:** 请记住,如果您要通过 ajax 发出请求,则必须创建一个输入,其中保存 csrf 令牌。

    <input type="hidden" id="_token" name="_token" value="{{ csrf_token() }}">
    

    【讨论】:

    • 您好!我照你说的做了。添加输入类型隐藏字段以添加令牌、JSON 响应和 ajax 功能。它给出了 ``` Uncaught TypeError: Cannot read property 'ajax' of undefined at HTMLSelectElement. ``` 。这个错误。如果我删除 ``` _token : token, ``` this,我会得到 500 Internal Server Error。你能给出一个解决方案吗?
    猜你喜欢
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多