我想将属于用户A的数据复制到用户B.首先,我将获得用户A的数据。
$item = item::where('id_user', $user_a)->get();
// id_user is FK inside item table
然后使用下面的代码创建/更新用户B中的现有记录给用户A.
$test = item::createOrUpdate($item->toArray());
例如。
Item
id | id_user | id_item
1 1 1
2 1 2
3 1 3
4 2 1
如上所示,id_user 1包含3个项目,而id_user 2仅包含1个项目。我想将id_item 2和3从id_user 1复制到id_user 2。
我想将所有数据从用户A复制到用户B,如果该项目存在则只会更新其他将为用户B插入新记录。我的方法是否正确?我尝试过,但它没有显示任何错误,但没有为用户B创建或更新。
答案 0 :(得分:0)
符合我的评论。
因为我看到一个数据透视表,它似乎是一个多对多的关系。
用户所属的商品和商品属于多个用户。
鉴于此,您可以将关系函数放在每个模型上,如。
在用户模型中:
public function items() {
return $this->belongsToMany(Product::class);
}
在产品型号中:
public function users() {
return $this->belongsToMany(User::class);
}
现在你可以做到:
$userA = User::find($id_a);
$a_items = $userA->items; // this will return items that belong to user A.
您现在可以将这些项目附加到其他用户:
$userB = User::find($id_b);
$userB->items()->attach($a_items); // if this doesn't work try, $a_items->pluck('id');
注意:如果您没有遵循命名约定,请明确声明Laravel您的外键名称。例如,您使用id_user
作为User
的外键,而Laravel期望它是user_id
。
有关信息:https://laravel.com/docs/5.4/eloquent-relationships#many-to-many
编辑:
由于您已经向我提供了输入,因此您可以在关系方法中执行此操作,例如在用户中:
return $this->belongsToMany(Product::class, 'user_product', 'id_user', 'id_product');