我是CakePHP的新手并且有一个相当基本的问题。
我有两个表:books
和users
。 books
和users
有一种关系。我已经为上面创建了MVC。
现在,当用户登录系统时,我希望用户能够通过查看“索引”操作的结果来预订书籍(即books_users
中的条目)。要使用的API是什么?
$ this-> Book-> save()似乎不合适,因为我们没有创建一本书。我们只希望现有book
与已登录的user
之间存在关联。
我试图避免,检索$ this-> Book,手动遍历子数组User
,创建一个新的子数组并保存整个事物。我相信必须有一个更简单的方法。
答案 0 :(得分:1)
您只需将记录保存到包含两者ID的Book或User,它就会将其插入到HABTM表中。
$this->data['User']['id'] = {USER_ID};
$this->data['Book']['id'] = {BOOK_ID};
$this->Book->save($this->data);
查看HABTM表,您将找到该记录。
答案 1 :(得分:1)
改编自Chuck的回答,不确定为什么编辑被推回。
class Book extends AppModel {
/************************************************************************
* If you want your multiple assoc. to work you must set unique to *
* false, otherwise when you save an entry it will enforce unique *
* on book ID and subsequently your associations will delete previously *
* saved associations, acting more like "User HasMany Books". *
************************************************************************/
var $hasAndBelongsToMany = array(
'User' => array(
'className' => 'User',
'unique' => false
));
public function addUser($bid, $uid) {
$this->data['User']['id'] = $uid;
$this->data['Book']['id'] = $bid;
$this->save($this->data);
}
}
$this->Book->addUser($bid, $uid);
Fat Models / Skinny Controllers。允许重复条目(您需要约束限制并检查重复项,否则默认行为会使HMBTM变得困难)。完全符合您的要求,您只需提供书籍和用户ID。
CakePHP不倾向于鼓励复杂的关联,这是因为HMBTM只是一种方便,在将其与其他关联混合时应该小心,根据下面提供的链接,自定义关联比CakePHP中的HMBTM
答案 2 :(得分:0)
简而言之 - 获取图书的id
和用户的id
。将其保存到books_users
表格。
id | book_id | user_id
1 1 1
2 2 2
3 2 3
如果您已正确设置关联,当您请求用户时,他们的所有图书都将从联接表中返回。
如果一个人可以同时预订多本书,你的逻辑需要处理 - 可用的书籍数量......
http://book.cakephp.org/2.0/en/models/saving-your-data.html#saving-related-model-data-habtm
有一个例子。