如果不存在,如何通过插入数据将数据从用户复制到另一个用户,如果存在则更新?

时间:2017-08-22 01:47:15

标签: laravel eloquent

我想将属于用户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创建或更新。

1 个答案:

答案 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');