cakephp 中的正确模型关联
Posted
技术标签:
【中文标题】cakephp 中的正确模型关联【英文标题】:Correct model associations in cakephp 【发布时间】:2015-02-05 09:56:24 【问题描述】:我使用HABTM 来填充数据库。我有 3 个模型。用户,书籍,评论。 为了加入我在 HABTM users_books 表中使用的表 books 和 users 中的记录,并绑定 cmets,我使用了两个主键 user_id 和 book_id,它们都被设置为外键:
PRIMARY KEY (user_id, book_id)
FOREIGN KEY (user_id, book_id) REFERENCES users_books (user_id, book_id)
表格书和users_books 正在填充,但在某些情况下,我可以填充评论表,但只有user_id 和book_id,其他数据为NULL。或者如果我从我得到的 saveAll 查询中删除 user_id(注释数组):
Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails
所以我猜它要么违反 cakephp 约定,要么我做错了什么。
这是示范书的部分:
public $hasAndBelongsToMany = array(
'User' =>
array(
'className' => 'User',
'joinTable' => 'users_books',
'foreignKey' => 'book_id',
'associationForeignKey' => 'user_id',
'unique' => true,
'conditions' => '',
'fields' => 'book_id',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
),
'Comment' =>
array(
'className' => 'Comment',
'joinTable' => 'comments',
'foreignKey' => 'book_id',
'associationForeignKey' => 'user_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',),);
并评论:
public $belongsTo = array (
'Book' => array (
'foreignKey'=>false,
'conditions'=> array('Comment.book_id = UserBook.book_id')));
编辑:
要保存的数据
$this->request->data['Book']['title'] = "title".rand(1,1220);
$this->request->data['Book']['author'] = "author".rand(1,1220);
$this->request->data['User']['id'] = $this->Auth->user('id');
$this->request->data['Book']['Comment']['body'] = "cm: ".rand(1,1220);
$this->Book->save($this->request->data, array('deep'=>TRUE));
还有保存调用:
$this->Book->saveAll($this->request->data, array('deep'=>TRUE));
【问题讨论】:
你应该有Book hasMany Comment。您有Book HABTM 评论。 您能否显示您尝试保存数据的代码以及您要保存的数组的结构? 我已经尝试了 saveAll、saveAssociated,但都没有成功。 只能确认AgRizzo所说的。使用 HABTM 完全是“错误的” 【参考方案1】:我认为请求数据数组的格式不正确,以便 cakephp 正确保存。 你可以发布数组吗? 你可以在 save() 函数之前添加这一行:
pr($this->request->data);
查看此链接:Saving HABTM
【讨论】:
Array ( [Book] => Array ( [title] => title125 [author] => title625 ) [User] => Array ( [id] => 4 ) [Comment] => Array ( [body] => cm: 507 ) )
我认为这里的问题是一个表中有多个索引键。
在我看来问题出在模型注释内部。我知道这是一个连接表,但主键必须是 comment_id 和 book_id,然后你将有另一个名为 user_id 的外键,它是用户的参考 id。如果我理解得很好,您不需要使用 HABTM 模型而是使用 Has Many Through 模型,因为您在模型中不仅有两个主键,而且还有用户的另一个信息。见参考:[链接] (book.cakephp.org/2.0/en/models/…)
感谢您指出这一点。我认为 HABTM 足以建立连接,但正确的答案是 HMT,我的数据格式不正确,而我试图将其保存到数据库中。所以我投票给你的第一个答案。干杯以上是关于cakephp 中的正确模型关联的主要内容,如果未能解决你的问题,请参考以下文章