2012-05-01 7 views
0

내 질문은 단순히 주 테이블 (책)에 중복 항목을 삽입하지 않고 데이터를 조인 테이블 (user_book)에 삽입하는 방법입니다.중복 피하기 datamapper 코드 점화 기 데이터베이스 레코드

는 주로 우리가

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와 같은 예 마이크)를 삽입하고 때 문제입니다. 중복 된 도서는 도서 표에 표시되며 위의 표는 다음과 같습니다 :

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 구조에서 어떤 것을 변경해야합니다.

위의 코드는 작동하지 않지만 내가 말하는 것에 대한 아이디어를 제공해야합니다.

업데이트 : 두 사용자가 같은 책을 좋아하는 경우

가 요약하면, 난 그냥 조인 테이블 (users_books)와 동안이 아니라 테이블에 새 레코드를 만드는 데에 레코드 (책을) 삽입 할. 고유 한 sql 태그를 사용하면 고유 한 목록을 유지하지만 다중 관계를 조인 테이블 users_books에 삽입 할 수 없으므로 작동하지 않습니다.

+0

위 코드가 작동하지 않는 이유는 무엇입니까? 가는 올바른 길을 찾는다. – Zombaya

답변

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 on saving relationships을 확인해야합니다.