PHP Doctrine - нарушение ограничения целостности: 1062 Повторяющаяся запись (первичный ключ) - PullRequest
1 голос
/ 23 июля 2010

Я загружаю множество User и связанных Group объектов из пользовательского запроса PDO (используя соединение Doctrine => $ dbh = Doctrine_Manager :: 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_field, который можно изменить в этом контексте). Однако Doctrine пытается вставить, и ограничение ключа нарушено.

Я понимаю, что выдается ошибка, однако я хочу иметь возможность только обновить этот столбец some_field (и, возможно, самое главное: НЕ ГРУППА). Возможно ли все это, используя вышеуказанную предварительную загрузку?

1 Ответ

1 голос
/ 24 июля 2010

Ну, вы создаете новые объекты, поэтому доктрина пытается их сохранить.

Читать о состояниях записи доктрины: http://www.doctrine -project.org / Documentation / manual / 1_2 / ru / component-Overview: запись: состояние получения-записи

Вы можете влиять на состояние записи, манипулируя _state защищенной переменной.

Также взгляните на конструктор Doctrine_Record.Возможно, поможет создание объекта User другим способом:

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

Выглядит немного странно, но если первый аргумент не задан, второй игнорируется.Второй аргумент сообщает, является ли объект новым или нет, и устанавливает, что это состояние установлено так, как вы хотели.

Я бы также посмотрел, как доктрина увлажняет объекты внутри.

...