我已经使用了建立关系laravel sync的方法belongsToMany。调用此方法后,有时会将重复数据插入到数据透视表中。
这是code我用过的。
{
$selectedScreenCategories = $this->screenCategorySiteFieldsModel->addSameKeyForElementsInArray($screenCategoryIds,'screen_category_id');
$siteField->screenCategories()->sync($selectedScreenCategories);
}
Run Code Online (Sandbox Code Playgroud)
这是migration用于创建pivot表的。
{
{
public function up()
{
Schema::create('site_field_screen_categories',function (Blueprint $table){
$table->increments('id');
$table->unsignedInteger('screen_category_site_field_id')->nullable(false);
$table->unsignedInteger('screen_category_id')->nullable(false);
$table->foreign('screen_category_site_field_id','screen_category_site_field_id')->references('id')->on('screen_category_site_fields');
$table->foreign('screen_category_id')->references('id')->on('screen_categories');
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
这就是belongsToMany关系。
function screenCategories(){
return $this->belongsToMany('App\ScreenCategory','site_field_screen_categories','screen_category_site_field_id','screen_category_id');
}
Run Code Online (Sandbox Code Playgroud)
这是调用该方法的pivot表。beforesync
这是sync的数组$selectedScreenCategories。
[
0 => ["screen_category_id" => 6]
1 => ["screen_category_id" => 3]
2 => ["screen_category_id" => 5]
]
Run Code Online (Sandbox Code Playgroud)
这就是pivot表after调用sync方法。 …