0

まず、私は長い間 CakePHP を使用しており、API に非常に慣れています。これは顔と手のひらのエラーになると確信していますが、1時間以上立ち往生しているため、これについて新鮮な目が必要です.

UserJob、およびの 3 つのモデルがありCompanyます。

  1. Company多くを持っていますUser
  2. Company多くを持っていますJob

場合によっては、ユーザーがジョブ レコードを更新しているときに、ジョブのcompany_idフィールドを変更する必要があります。これが発生した場合、ユーザー自身のcompany_idフィールドを変更する必要もあります。したがって、事実上、UserJobは両方とも別の会社に再割り当てされます。

の CRUD update メソッドに、次のJobsControllerロジックを追加しました。

$this->Job->User->read(NULL, $this->Session->read('User.id'));
$this->Job->User->set('company_id', $this->data['Job']['company_id']);
$this->Job->User->save();

適切な値を含み、フォーム ヘルパーから送信された正しい値が含まvar_dump()れているような、典型的なデバッグ手法を使用して確認しました。$this->Session->read('User.id')$this->data['Job']['company_id']

テーブルのタイムスタンプがそうであることを示しているため、正しいUserレコードが更新されますが、データ配列からの正しいレコードではなく、フィールドが設定されます。modifiedcompany_idNULLcompany_id

興味深いことに、上記のスニペットの後、Jobレコードを保存すると、 (同じ配列を使用して)正しいもので更新されますcompany_id$this->data

テーブル$this->Job->User->save()に値を渡すように見えるだけです。NULL

<facepalm type="ラメ">

アプリケーション フローのさらに進んだ時点で、新しいジュニア開発者がコードをモンキー化したことが判明しました。この開発者は同じチケットを完了しようとしていて、データがロードされた save メソッドを誤って実行しましたNULL(ジョブ データの保存後、ジョブの保存に作業していたので気付かなかったのです...)。

いずれにせよ、SQL ダンプをたどっていくとエラーが見つかりました。そのため、正しいデバッグ パスを示してくれた @dhofstet の功績を認めてください。バージョン管理に感謝します。

</facepalm>

4

2 に答える 2

1

$this->data['Job']['company_id'] が null でないことを確認しましたか? 検証に問題があるのか​​もしれません。設定して保存する代わりに saveField を試しましたか?

于 2011-02-16T16:37:36.043 に答える
1

なぜそんなに複雑なのですか?

シンプルな

$this->Job->User->save($this->data);

トリックへの意志

[User][company_id] などで配列を埋めると仮定します

于 2011-02-16T20:30:31.250 に答える