2017-08-22 1 views
1

ユーザーAに属するデータをユーザーBにコピーします。まず、ユーザーAのデータを取得します。存在しない場合はデータを挿入し、存在する場合は更新することによって、ユーザーから別のユーザーにデータをコピーする方法はありますか?

$item = item::where('id_user', $user_a)->get(); 
// id_user is FK inside item table 

そして例えばユーザA

$test = item::createOrUpdate($item->toArray()); 

に、ユーザBの既存のレコードを更新/作成するために以下のコードを使用します。

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_user 2にid_item 2とid_user 2をid_user 1からコピーしたいと思います。

私はすべてのデータをユーザAからユーザBにコピーしたいのですが、アイテムがあれば更新します。そうでなければ、ユーザBに新しいレコードが挿入されます。私の道は正しいのですか?試しましたが、エラーは表示されませんが、ユーザーBの作成または更新は行われません。

+0

https://laravel.com/docs/5.4/eloquent-relationships#many-to-many

編集:

あなたはすでに私の入力を与えたので、あなたはユーザに、例えば、あなたの関係の方法でこれを行うことができますユーザーの単一レコードを取得するときに 'get()'の代わりに 'first()'を使用してください。その後、あなたのコードが動作します。 –

+0

は多対多の関係ですか?そうであれば、関係を説明する関数を持つことができ、Aに添付されているものをBに添付することができます。 – Wreigh

+0

@SagarGautamこれは単一のレコードではありません。 – Crazy

答えて

0

私のコメントに沿っています。

ピボットテーブルが表示されているため、多対多の関係にあるようです。

ユーザーのbelongsToManyアイテムとアイテムbelongsToManyユーザー。

とすれば、あなたは関係関数を各モデルに置くことができます。

ユーザーモデルで

:今、あなたが行うことができます

public function users() { 
    return $this->belongsToMany(User::class); 
} 

:製品モデルで

public function items() { 
    return $this->belongsToMany(Product::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に明示的に指定します。たとえば、Userの外部キーとしてid_userを使用しましたが、Laravelはuser_idと予想しています。

情報については

:私はあなたがすべきだと思う

return $this->belongsToMany(Product::class, 'user_product', 'id_user', 'id_product'); 
+0

申し訳ありませんが、id_userを主キーとしてアイテムテーブルに入れたらどうなりますか?例えば。私は3つのテーブルがあり、product、user、user_product(item)があります。私のuser_productでは、私はid_userを主キーとして、id_productをFKと主キーとして入れました。あなたのメソッドを使用している場合、私はnull値を取得します。 – Crazy

+0

私のメソッドを使用する場合は、明示的にLaravelにキーのために異なる規則を使用していることを伝えてください。上で述べたように、あなたは 'id_user'を使っていますが、Laravelは代わりに' user_id'を期待しています。私は私の答えを更新します。 – Wreigh

+0

動作の仕組みがわかりません。操作が成功した後は何も変わりません。心配しないで、私は自分で他の方法を考えます。 – Crazy

関連する問題