Doctrine PHP原则-完整性约束冲突:1062重复条目(主键)

Doctrine PHP原则-完整性约束冲突:1062重复条目(主键),doctrine,mysql-error-1062,Doctrine,Mysql Error 1062,我正在从自定义PDO查询加载大量的User和相关的Group对象(使用条令连接=>$dbh=doctor\u管理器::connection()->getDbh();)。查询涉及DQL中不支持的交叉联接 我手动创建对象并传递值,如下所示: foreach($pdo as $p) { $u = new User(); $u->userid = $p['userid']; $u->username = $['username'

我正在从自定义PDO查询加载大量的
User
和相关的
Group
对象(使用条令连接=>$dbh=doctor\u管理器::connection()->getDbh();)。查询涉及DQL中不支持的交叉联接

我手动创建对象并传递值,如下所示:

    foreach($pdo as $p) {    
        $u = new User();
        $u->userid = $p['userid'];
        $u->username = $['username'];
        //$u->some_field; skipped on purpose
        $u->Group->groupid = $['groupid'];
        $u->Group->groupname = $['groupname'];
        array_push($return, $set);
    }
我希望能够保存
User()
对象(因为
$u->some\u字段可以在此上下文中更改)。然而,条令试图插入,违反了关键约束


我知道会抛出错误,但是我希望能够只更新
某个字段
列(可能最重要的是:不是组)使用上面的预加载,这一切都可能吗?

好吧,您正在创建新对象,所以doctrine会尝试将它们持久化

了解条令的记录状态:

您可以通过操纵_stateprotected变量来影响记录状态

另外,请看一下记录的构造函数。也许以不同的方式创建用户对象会有所帮助:

$u = new User('User', false);
看起来有点奇怪,但若并没有给出第一个参数,那个么第二个参数将被忽略。第二个参数说明对象是否为新对象,并使该状态设置为您想要的状态


我还将研究条令如何在内部定义对象

好吧,你正在创建新的对象,所以条令试图将它们持久化

了解条令的记录状态:

您可以通过操纵_stateprotected变量来影响记录状态

另外,请看一下记录的构造函数。也许以不同的方式创建用户对象会有所帮助:

$u = new User('User', false);
看起来有点奇怪,但若并没有给出第一个参数,那个么第二个参数将被忽略。第二个参数说明对象是否为新对象,并使该状态设置为您想要的状态


我还将研究条令如何在内部定义对象

更改构造函数没有帮助。。。我目前使用一个更新查询来实现这个神奇的功能,搞乱(内部)记录状态似乎并不好,因为它是由内部控制的,对吗?\u状态是受保护的,所以所有扩展类都有权使用它。如果你不想这么做,我会试着用Doctrine\u Hydrator或\u RecordDriver为记录添加水合物。查看条令查询抽象::execute()方法以了解条令如何将对象分解。更改构造函数无助于。。。我目前使用一个更新查询来实现这个神奇的功能,搞乱(内部)记录状态似乎并不好,因为它是由内部控制的,对吗?\u状态是受保护的,所以所有扩展类都有权使用它。如果你不想这么做,我会试着用Doctrine\u Hydrator或\u RecordDriver为记录添加水合物。请看一看条令查询抽象::execute()方法,以了解条令如何处理对象。