Isu*_*igo 1 synchronization laravel eloquent
我已经使用了建立关系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方法。
我花了几个小时。仍然无法找到解决方案。
解决方案。只需将传递给函数的数组的in
更改为如下所示。integer keysstring keys$selectedScreenCategoriessync
改变
[
0 => ["screen_category_id" => 6]
1 => ["screen_category_id" => 3]
2 => ["screen_category_id" => 5]
]
Run Code Online (Sandbox Code Playgroud)
进入
[
"Gfdsj" => ["screen_category_id" => 6]
"pQrst" => ["screen_category_id" => 3]
"uvWzy" => ["screen_category_id" => 5]
]
Run Code Online (Sandbox Code Playgroud)
您可以使用str_random(5)php 函数来生成随机字符串,例如"Gfdsj". 这将解决您的问题。
问题的原因。在运行该函数之前
检查表中已有的记录。
该记录为.pivotsyncscreen_category_id = 1
$selectedScreenCategories然后检查传递给函数的数组sync。请参见下图。
当我们将此数组传递给sync函数时,因为已经有一条记录screen_category_id = 1,所以上面突出显示的记录是将现有记录更新为 的原因screen_category_id = 3。现在我们有 2 条记录screen_category_id = 3。
希望你能理解。
| 归档时间: |
|
| 查看次数: |
3033 次 |
| 最近记录: |