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