我的问题是如何将数据插入到连接表(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这样的Mike)时。副本将出现在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);
}
if(book->存在)在“books”表中 然后检查关系,看看用户和书籍之间是否存在关系,如果有,则不要插入。我还需要更改mysql db结构中的任何内容以避免这种情况。
上面的代码没有用,但应该知道我在说什么。
更新:
总之,如果两个用户喜欢同一本书,我只想将一个记录(书)插入到连接表(users_books)中,而不是在表中创建新记录。使用唯一的sql标记不起作用,因为它保留了唯一列表,但它阻止将多个关系插入到连接表users_books中。
答案 0 :(得分: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
}