2015-12-09 50 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