2015-12-09 37 views
2

使用同步功能同步一个belongsToMany关系:Laravel同步关系可选参数

$model->products()->sync($productIds); 

在$ productIds阵列有一些标识的平板阵列 - 是这样的:

$productIds = [1,3,5,6]; 

我想要的: 数据透视表还有其他列,如“created_by”和“updated_by”。

但是我怎么能添加这些字段到我的数组没有做foreach循环? 有没有更简单的方法来做到这一点?

我需要一个这样的数组:

$productIds = [1 => [ 
    'created_by' => 1, 
    'updated_by' => 1 
],3 => [ 
    'created_by' => 1, 
    'updated_by' => 1 
],5 => [ 
    'created_by' => 1, 
    'updated_by' => 1 
],6 => [ 
    'created_by' => 1, 
    'updated_by' => 1 
]]; 

是的,我知道我可以用foreach做到这一点,添加列,同时通过阵列I循环。但我想要做得更短..有没有办法做得更短(也许与laravel)?

回答

2

应该足以通过你已经在$ productIds在你的代码示例设置为同步()

此方法不仅适用于整数数组。您还可以传递一个数组,其中键是同步标识,值是应为给定标识设置的数据透视属性。

这应该做的伎俩:

$productIds = [ 
    1 => [ 
    'created_by' => 1, 
    'updated_by' => 1 
    ] 
    //rest of array 
]; 

$model->products()->sync($productIds); 

只要确保你已经在你的关联定义所定义的字段数据透视表字段。

为了基于ID的在$ productIds列表,你可以做以下这样的表:

$productIds = array_fill_keys($productIds, array(
    'created_by' => 1, 
    'updated_by' => 1, 
)); 
+0

我知道如何同步与更多的属性的关系。 我想要的是动态生成数组... – goldlife

+0

我不确定我是否理解 - 您想要将$ productIds中的ID数组转换为上面的数组?其中ID是键,值是其中created_by/updated_by等于1的数组? –

+0

不......我不想转换我的数组。我只是想知道是否有可能将我的平面数组($ productIds = [1,3,5,6];)扩展为一个多dim数组,其中附加数组与上面示例中的完全相同。所以我有一个像$ productIds这样的数组,以及另一个像这样的数组:[ 'created_by'=> 1, 'updated_by'=> 1 ]并且第二个数组必须在每个ID之后就位。问题是:有没有一种方法可以得到它,或者有没有解决方案,没有我的$ productIDs的foreach,并在每个ID附加另一个数组? – goldlife