1

在我的 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 无法添加或更新子行:外键约束失败(dbprefix. objects_users, CONSTRAINT objects_users_ibfk_2FOREIGN KEY ( user_id) REFERENCES users( id) ON DELETE CASCADE ON UPDATE CASCADE)

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

4

2 回答 2

1

如果您有表'objects_users',那么对象和用户之间的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';

让我知道这是否适合您。

于 2013-04-08T19:52:16.463 回答
0

users错误信息表明您提供的 User-id 在表中不存在。

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

debug($data);

并从调试面板检查您的 SQL 语句

于 2013-04-08T19:52:43.577 回答