【问题标题】:Problems creating a HABTM record in CakePHP在 CakePHP 中创建 HABTM 记录时出现问题
【发布时间】:2013-04-08 19:24:56
【问题描述】:

在我的 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_2 FOREIGN KEY (user_id) REFERENCES @ 987654329@ (id) ON DELETE CASCADE ON UPDATE CASCADE)

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

【问题讨论】:

    标签: php cakephp cakephp-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';
    

    让我知道这是否适合你。

    【讨论】:

    • 这对它进行了排序。谢谢你。快到了!刚刚在数组中键入了错误的 POST 数据。再次感谢。
    【解决方案2】:

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

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

    debug($data);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      相关资源
      最近更新 更多