0

私の質問は、メインテーブル(ブック)に重複するエントリを挿入せずに結合テーブル(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 に複数の関係を挿入することはできません。

4

1 に答える 1

1

あなたがすることができます:

$b = new book();  
$b->where('id_book', $data['user_booklist'][$i]['id'])->get();
// I believe you can do this as well, but I'm not sure:
// $b->where('id', $data['user_booklist'][$i]['id'])->get();

$u = new user();
$u -> where('id_user', $data['user_profile']['id'])-> get();

if( $b->exists() && $u->exists() )
{
   // This saves the relationship between the book and the user
   $b->save($u);
}
else  
{
   // Could not find the book or the user
}

リレーションシップの保存に関する datamapper-manual を確認してください。

于 2012-05-02T09:37:07.750 に答える