1

Userカスタム PDO クエリから多くの関連オブジェクトをロードGroupしています (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);
    }

オブジェクトを保存できることを望んでいました(このコンテキストで変更できるため)。ただし、Doctrine は挿入を試み、キー制約に違反しています。User()$u->some_field

エラーがスローされることは理解していますが、その列のみを更新できるようにしたいと考えていsome_fieldます (そしておそらく最も重要なのは、グループではありません)。上記のプリロードを使用しても、これはすべて可能ですか?

4

1 に答える 1

1

さて、新しいオブジェクトを作成しているので、doctrine はそれらを永続化しようとします。

doctrine の記録状態について読む: http://www.doctrine-project.org/documentation/manual/1_2/en/component-overview:record:getting-record-state

_state 保護変数を操作することで、レコードの状態に影響を与えることができます。

また、Doctrine_Record のコンストラクターを見てください。別の方法で User オブジェクトを作成すると役立つ場合があります。

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

少し奇妙に見えますが、最初の引数が指定されていない場合、2 番目の引数は無視されます。2 番目の引数は、オブジェクトが新しいかどうかを示し、必要に応じてその状態を設定します。

また、doctrine がオブジェクトを内部的に水和する方法についても調べます。

于 2010-07-24T15:36:11.410 に答える