在CakePHP中创建HABTM记录时出现问题

时间:2013-04-08 19:24:56

标签: php cakephp cakephp-2.0

我在CakePHP应用程序中创建HABTM记录时遇到问题。基本上,我有一些用户可以喜欢的对象,与Facebook完全相同。这三个表是:

  • users
  • objects
  • objects_users

我正在尝试使用以下代码创建HABTM记录:

$data = array(
    'Object' => array(
        'id' => $object_id
    ),
    'User' => array(
        'id' => $this->Auth->user('id')
    )
);
$this->Object->User->save($data);

但我不断收到以下错误消息:

  

错误:SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败(dbprefixobjects_users,CONSTRAINT objects_users_ibfk_2 FOREIGN KEY( user_id)参考usersid)更新CASCADE上的DELETE CASCADE)

当我知道两个相关ID时,如何以编程方式在控制器中创建HABTM记录?

2 个答案:

答案 0 :(得分:1)

如果你有'objects_users'表,那么Object和User之间的HABTM模型将被称为ObjectsUser。

您可以使用以下代码在objects_users表中创建记录:

$data = array();
$data['ObjectsUser']['user_id'] = $user_id;
$data['ObjectsUser']['object_id'] = $object_id;

// From Users Controller use following code to insert the document
$this->User->ObjectsUser->save($data);

// From Objects Controller use
$this->Object->ObjectsUser->save($data);

要使上述两个插件工作,您必须在两个模型之一中定义关系,如下所示:

// In User.php Model
public $hasAndBelongsToMany = 'Object';

// In Object.php Model
public $hasAndBelongsToMany = 'User';

请告诉我这是否适合您。

答案 1 :(得分:0)

错误消息表明您提供的用户ID在users表中不存在。

通过以下方式检查您要保存的数据:

debug($data);

从调试面板检查SQL语句