私の質問は、メインテーブル(ブック)に重複するエントリを挿入せずに結合テーブル(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
しかし、問題は、Books テーブルに存在する新しい本 (B3 のようなマイクなど) を挿入するときです。複製が books テーブルに表示され、上記のテーブルは次のようになります。
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
私が解決しようとしていることは今意味がありますか?それとも、書籍の一意のリストをまったく作成できないのでしょうか?
データベースユーザーとブックユーザー<--->ブックがusers_booksによって関連付けられている場合、ブックレコードをデータベースに挿入するときに、それが重複していないことを確認する必要があります。さらに、ブックが存在する場合は、ブック レコードではなくリレーションが挿入されます。どうすればそれができますか?1つのアプローチは言うことです
$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);
}
"books" テーブルに (book->exist) がある場合は、関係をチェックして、ユーザーと本の間に関係があるかどうかを確認し、存在する場合は挿入しないでください。さらに、これを回避するには、mysql db 構造内の何かを変更する必要がありますか?
上記のコードは機能していませんが、私が話していることを理解できるはずです。
アップデート:
要約すると、2 人のユーザーが同じ本を気に入った場合、レコード (本) を結合テーブル (users_books) に挿入するだけで、テーブルに新しいレコードを作成する必要はありません。一意の sql タグを使用すると、一意のリストが保持されるため機能しませんでしたが、結合テーブル users_books に複数の関係を挿入することはできません。