PHP Doctrine - Integrity constraint violation: 1062 Duplicate entry (Primary key)

StackOverflow https://stackoverflow.com/questions/3313555

  •  27-09-2020
  •  | 
  •  

Вопрос

I'm loading lots of User and related Group objects from a custom PDO query (using the Doctrine connection => $dbh = Doctrine_Manager::connection()->getDbh(); ). The query involves a cross join which isn't supported in DQL.

I'm manually creating the objects and passing the values like so:

    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);
    }

I was hoping to be able to save the User() object (because of the $u->some_field which can be changed in this context). However Doctrine tries to insert and a key-constraint is violated.

I understand that the error is thrown, however I want to be able to only update that some_field column (and maybe most importantly: NOT THE GROUP). Is this all even possible using the above preloading?

Это было полезно?

Решение

Well, you're creating new objects so doctrine tries to persist them.

Read about doctrine's record states: http://www.doctrine-project.org/documentation/manual/1_2/en/component-overview:record:getting-record-state

You can influence record state by manipulating _state protected variable.

Also, take a look at constructor of Doctrine_Record. Maybe creating User object in a different way would help:

$u = new User('User', false);

Looks a bit weird but if first argument is not given than second is ignored. Second argument tells if object is new or not and makes that state is set as you wanted.

I would also look at how doctrine hydrates objects internally.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top