基于ID插入多个项目 - Laravel

时间:2017-10-28 20:26:15

标签: javascript php laravel

我有两个表productsshipments以及带有字段product_shipment的数据透视表product_id and shipment_no。在数据透视表中,可以有一个货件编号,例如。 #4562包含2个或更多产品。这是我想要实现的目标。

现在这就是我的代码的工作方式。当我选择产品hammer时,我可以检索hammer的ID。当我选择其他产品screwdrivers的ID时,它会替换hammer的ID,而不是同时存储它们。

插入我的数据后,我希望在数据透视表

中找到一些这样的内容

产品表

 product_id   name
    1         hammer
    2         screwdriver

出货表

shipment_no    courrier        
 4562          MaerskLine

product_shipment - Pivot

   shipment_no     product_no
     4562             1
     4562             2

这是我选择产品复选框的地方

HTML

 <input onclick="return productSelected(this)" type="checkbox"
 id="{!! $product->id !!}" name="{!! $product->name !!}" /> 

当我选中一个复选框时,我如何选择并检索我的产品ID

JS

  function productSelected(product)
{

    $(".panel").append(
    '<input type="text"  value='+product.id+'   " id="product_id"  name="product_id" />'

}

如何将数据保存到我的数据库中

控制器

$product_id = Input::get('product_id');
        $product_selected = Product::all()->where('id',$product_id)->first();

        $shipment_details = new Shipment(array(
            'shipment_no' => $request->get('shipment_no'),
            'courrier' => $request->get('courrier'),


        ));

        $product_id->shipments()->save($shipment_details);   

货件型号

public function products()
    {
        return $this->belongsToMany('App\Product')
        ->withTimestamps();
    }

产品型号

public function shipments()
    {
        return $this->belongsToMany('App\Shipment')
        ->withTimestamps();
    }

如何获取我选择的所有产品的ID,并使其看起来像我pivot table中的内容?感谢您的帮助

1 个答案:

答案 0 :(得分:2)

首先更改输入名称,如下所示:

function productSelected(product)
{

    $(".panel").append(
    '<input type="text"  value='+product.id+'   " id="product'+product.id+'"  
     name="products[]" />'

}

您现在应该在控制器中获得包含所有选定ID的阵列产品。所以你可以这样做:

$shipment_details = new Shipment(array(
        'shipment_no' => $request->get('shipment_no'),
        'courrier' => $request->get('courrier'),
));
$shipment_details->save();
$shipment_details->products()->sync($request->get('products'));

当然,您的manyToMany模型中ProductShipment{ u 'body': u '{"first_name":"ABCDE", "last_name": "john"}', u 'resource': u '/HelloPython', u 'requestContext': { u 'resourceId': u 'kl9', u 'apiId': u '81s0q', u 'resourcePath': u '/HelloPython', u 'httpMethod': u 'POST', u 'requestId': u 'e1c72ee6-7-9059-1bd746727831', u 'path': u '/prod/HelloPython', u 'accountId': u 'cccc', u 'identity': { u 'apiKey': u '', u 'userArn': None, u 'cognitoAuthenticationType': None, u 'accessKey': None, u 'caller': None, u 'userAgent': u 'curl/7.54.0', u 'user': None, u 'cognitoIdentityPoolId': None, u 'cognitoIdentityId': None, u 'cognitoAuthenticationProvider': None, u 'sourceIp': u 'ccccc', u 'accountId': None }, u 'stage': u 'prod' }, u 'queryStringParameters': None, u 'httpMethod': u 'POST', u 'pathParameters': None, u 'headers': { u 'Content-Type': u 'application/json', u 'Via': u '1.1 07c960c5d.cloudfront.net (CloudFront)', u 'CloudFront-Is-Desktop-Viewer': u 'true', u 'CloudFront-Is-SmartTV-Viewer': u 'false', u 'CloudFront-Forwarded-Proto': u 'https', u 'X-Forwarded-For': u 'xxx, cccc', u 'CloudFront-Viewer-Country': u 'US', u 'Accept': u '*/*', u 'User-Agent': u 'curl/7.54.0', u 'X-Amzn-Trace-Id': u 'Root=1-59f4e74a9fecde', u 'Host': u '81s0q.execute-api.us-east-1.amazonaws.com', u 'X-Forwarded-Proto': u 'https', u 'X-Amz-Cf-Id': u 'GXnihIB370EYguOCiGYEA==', u 'CloudFront-Is-Tablet-Viewer': u 'false', u 'X-Forwarded-Port': u '443', u 'CloudFront-Is-Mobile-Viewer': u 'false' }, u 'stageVariables': None, u 'path': u '/HelloPython', u 'isBase64Encoded': False } 的关系。