私の質問は、メインテーブル(ブック)に重複したエントリを挿入することなく、データをジョインテーブル(user_book)に挿入する方法です。重複を避けるデータマッパーコードのイニシャライタのデータベースレコード
は、主に私たちは
id Users id Books id Users Books
1 Sam 1 B1 1 1 1
2 Ben 2 B2 2 1 3
3 Mike 3 B3 3 3 3
4 2 2
下のツリーテーブルを持って検討してくださいしかし、私は本テーブルに存在し、新しいブック(B3などのEXマイク)を挿入していたときに問題があります。重複は、本表に表示され、上記の表は次のようになります:
id Users id Books id Users Books
1 Sam 1 B1 1 1 1
2 Ben 2 B2 2 1 3
3 Mike 3 B3 3 3 4
4 B3 4 2 2
私が解決しようとしているものを今理にかなっていますか?それとも、私は書籍の一意のリストを持つことはできませんか?
私はデータベース ユーザーや書籍 ユーザー<考える を挿入しようと思った場合--->ブックは、我々は、DBへの本のレコードを挿入するとき、それがないことを確認する必要がありusers_books によって関連しています重複する。さらに、本が存在すれば、本の記録ではなく、関係が挿入される。それをどうすればできますか? 一つのアプローチは、テーブル その後、関係をチェックして、ユーザーや書籍の関係があるかどうかを確認(book->が存在する)場合は、「ブック」に
$m=new Book();
$m->where('id_book', $data['user_booklist'][$i]['id'])->get();
$u = new User();
$u -> where('id_user', $data['user_profile']['id'])-> get();
if(!$u->where_related($m))
{
$m -> name = $data['user_booklist'][$i]['name'];
$m -> id_book = $data['user_booklist'][$i]['id'];
$m -> save($u);
}
を言うことです、その後がある場合はしないでくださいそれを挿入します。さらに、これを避けるために、mysql db構造内のものを変更する必要があります。
上記のコードは機能していませんが、私が何を言っているのかを理解する必要があります。
更新:要するに
2人のユーザーが同じ本を好きなら、私は参加するテーブル(users_books)にしてテーブルに新しいレコードを作成しないようにしながら、レコード(書籍)を挿入します。ユニークなsqlタグを使用すると、ユニークなリストは保持されますが、複数のリレーションシップをジョインテーブルusers_booksに挿入することはできません。
あなたが行うことができ
なぜ上記のコードは機能しませんか?行くべき正しい道に見えます。 – Zombaya