2012-05-01 2 views
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 

Но проблема в том, когда я вставить новую книгу (бывший Майк, как 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 мы должны убедиться, что, когда мы вставляем книгу запись в БД это не дублировать. Кроме того, если книга существует, будет вставлено отношение, а не книжная запись. Как это можно сделать? Один подход заключается сказать

$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, чтобы этого избежать.

Вышеупомянутый код не работает, но должен дать представление о том, о чем я говорю.

Update:

Таким образом, если два пользователя понравился ту же книгу, я просто хочу, чтобы вставить запись (книга) в таблицу Join (users_books) и при этом не в создании новой записи в таблице. Использование уникального sql-тега не сработало, так как оно хранит уникальный список, но не позволяет вставить несколько отношений в таблицу join 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.