Laravel 5多对多插入Custom Pivot Cell

时间:2016-04-26 15:23:52

标签: php laravel

我在官方文档上找不到任何内容。

我需要在$product_count数据透视表

中插入invoice_product
 $product_ids = [1,2,3]; 
 $product_count = [1,1,1];

 $invoice->product()->attach($product_ids, $product_count); // don't work   
  

SQLSTATE [42S22]:未找到列:1054'字段列表'中的未知列'0'(SQL:插入invoice_product0created_at,{{1} },invoice_idproduct_idupdated_at)值(2,2016-04-26 15:33:57,437,1500125,2016-04-26 15:33:57, 1),(2,2016-04-26 15:33:57,437,5121100,2016-04-26 15:33:57,1))

在第二个arg期待一个字符串,我应该怎么做呢。

1
  

preg_replace():参数不匹配,pattern是一个字符串,而replacement是一个数组

更新,所以当我尝试

 $product_ids = [1,2,3]; 
 $product_count = [array('product_count'=>2), array('product_count'=>3), array('product_count'=>4)];

 $invoice->product()->attach($product_ids, $product_count); // don't work   

这会将静态2放在所有invoice_product中,如何将其作为数组b / c插入每个产品计数需要不同?

2 个答案:

答案 0 :(得分:2)

假设您的数据库字段为:count

invoice_product表

invoice_id
product_id
count

产品型号

public function invoices() {
    return $this->belongsToMany('App\Invoice')->withPivot('count');
}

发票型号

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

在您的控制器中

//$invoice->products()->attach([1 => ['count' => 1]]);

在一般情况下,您必须附上:

[
$productId1 => ['count' => $countId1],
$productId2 => ['count' => $countId2],
]

在您的情况下,您必须执行以下操作:

$product_ids = [1,2,3]; 
$product_count = [1,1,1];

$attachements = [];
foreach ($product_ids as $index => $productId) {
    $attachements[$productId] = ['count' => $product_count[$index]];
}

$invoice->products()->attach($attachements);

答案 1 :(得分:0)

所以,显然我需要将第一个arg作为一个与col名称匹配的关联数组,

    $product_ids = [];
    $product_count = [];
    foreach($products as $product) {
        array_push($product_ids, array('product_id'=>$product->id, 'product_count'=>$product->product_count));
    }

    $invoice->product()->attach($product_ids);