CakePHP 3、関連データは更新されずに新規として保存されていますか?

user4458505

更新

要求されたように、これは$this->request->data私のフォームを形成するものです、

'office' => 'LON-test33',
'phone' => '456456456',
'address' => [
    'addline1' => '1 test0009 st',
    'addline2' => 'p09987',
    'addline3' => 'test9999',
    'postcode' => 'p888',
    'country_id' => '226'
],

つまり、オフィス、電話は私のオフィステーブルの一部であり、住所はアドレステーブル全体です。

また、IDを指定してアドレステーブルだけを更新しようとすることで、モデル内に何かがあるかどうかを確認するためのテストも実行しました。これはうまくいくので、私のモデルは問題ありません。だから私はOfficeモデルと何か関係があるのか​​、それとも私のコードに何か問題があるのか​​を考えていますか?

ありがとう、


だから私はCakePHP3.0.somethingを使用しています...。

オフィステーブルに関連付けられているデータであるアドレスを更新しようとしています。しかし、オフィスを更新すると、住所はまったく新しいレコードとして保存されますか?理由がわかりませんか?

これが私がこれまでやってきたことです、

$OfficeTable = TableRegistry::get('Offices');
$CurrentOffice = $OfficeTable->get($OfficeID);

$OfficeTable->patchEntity($CurrentOffice, $this->request->data, ['associated' => ['Addresses']]);

debug( $OfficeTable->save($CurrentOffice) );

AssociatedpatchEntityにを設定しても違いはないようです。更新されたアドレスは保存されますが、新しいレコードとして保存されます。この新しいレコードIDは、Officeテーブルの「address_id」フィールドに配置されます。

しかし、なぜこの「新規/編集済み」アドレスを新しいレコードとして追加し、関連するIDレコードを更新しないのですか?

今私はドキュメントを読んでいて、私が理解していることを形成しました、それがレコードを見つけることができない場合、それは新しいレコードを作りますか?ただし、保存呼び出しをデバッグしました。オフィスとアドレスの両方で、「[new]」がfalseに設定されています。では、なぜ私のオフィスを更新するのに、新しいものではないと言われているときに新しいアドレスを作成するのですか?

さらに、デバッグ呼び出しの最後に、更新する必要のあるレコードの古いアドレスIDを含む「[original]」があります。

だから私は何が間違っているのですか?

私が自分自身を正しく説明していない場合(私は失読症です)、私に知らせてください、または何かが足りない場合は更新できます-ありがとう

ndm

一般に、これを解決する方法は2つあります。

  • リクエストデータとともにIDを渡すことによって、IDフィールドをエンティティ内でアクセス可能として設定する必要があります。これにより、パッチ適用プロセスで設定できるようになります。

  • または、パッチを適用するエンティティにIDがすでに存在することを確認します。たとえば、エンティティを取得するときに関連付けを含めるなどです。

    $CurrentOffice = $OfficeTable->get($OfficeID, [
        'contain' => [
            'Addresses'
        ]
    ]);
    

個人的には後者の方法をお勧めします。IDにアクセスできるようにする必要がないため、落とし穴が少なくなるからです。ここをお読みになることをお勧めします:悪意のあるユーザーが追加アクションでデータを更新するのを防ぐ

とはいえ、住所の詳細を変更するとすべてのオフィスに「影響」するため、オフィスと一緒に住所を編集するという事実は少し奇妙に思えます。したがって、通常、両方を同時に編集する必要はありません。ただし、アプリの内部と要件がわからないため、これは表面的な懸念事項にすぎません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

CakePHP 3 - テーブルに関連付けられていないデータを検証する (データベースの関与なしの検証)

分類Dev

この種のテーブル関係はmysqlとcakephpで許可されていますか?

分類Dev

CakePHP 3でデータを取得し、複数選択チェックボックスとして関連付けを表示するにはどうすればよいですか?

分類Dev

CakePHP3は特定の関連データを削除します

分類Dev

array_key_exists()は、パラメーター2が配列であり、nullが指定されていることを想定しています-Cakephp 3

分類Dev

Cakephpデータは、リクエストごとに更新する代わりに挿入されます

分類Dev

Cakephp3はコントローラーで承認されています

分類Dev

CakePHP2.4-DBアップデートが渡されたすべてのデータを保存しない1つのフィールドが永続化されることはありません

分類Dev

CakePHPはなぜnullに関連付けられているのですか?

分類Dev

CakephpでAjaxによって送信されたデータを取得する方法は?

分類Dev

CakePHP 3 モデルとしてテーブルを返す PostgreSQL 関数を使用するにはどうすればよいですか?

分類Dev

cakephp3を使用したクエリでさまざまなデータソースを使用するにはどうすればよいですか?

分類Dev

Cakephp 3.3.0-RC1:ヘッダーはすでに送信されています

分類Dev

CakePHP 3.xの関連テーブルからオブジェクトとしてデータを受信する方法(現在は配列として受信)

分類Dev

なぜcakephp3.xコントローラーとテーブルの関数は公開されているのに、エンティティの関数は保護されているのですか?

分類Dev

DateTimeがブートストラップdatetimepickerを使用してcakephp3.xに正しく保存されない

分類Dev

cakePHP3ではどのバージョンのFoundationが使用されていますか?

分類Dev

Cakephpフォームは送信されていません

分類Dev

CakePHP3.xにはGroupByが含まれています

分類Dev

CakePhpはajaxによって要求されたJavaScriptファイルにタイムスタンプを追加していますか?

分類Dev

CakePHP 3 - Creating hiddenField

分類Dev

Save associations with Cakephp 3

分類Dev

CakePHPと条件

分類Dev

cakephp3を使用して異なるデータベースから関連モデルを取得する

分類Dev

CakephpとAngularjsを使用してフォーマットされたテキストをmysqlに保存する

分類Dev

関連するモデルを処理して、cakephpでアクションを追加するにはどうすればよいですか?

分類Dev

Cakephp3はデータを保存できますが、関連付けを保存できません

分類Dev

モデルが保存されないのはなぜですか?(CakePHP 2.x)

分類Dev

グループ化して、cakephpが期待される結果を返さないことを数えます

Related 関連記事

  1. 1

    CakePHP 3 - テーブルに関連付けられていないデータを検証する (データベースの関与なしの検証)

  2. 2

    この種のテーブル関係はmysqlとcakephpで許可されていますか?

  3. 3

    CakePHP 3でデータを取得し、複数選択チェックボックスとして関連付けを表示するにはどうすればよいですか?

  4. 4

    CakePHP3は特定の関連データを削除します

  5. 5

    array_key_exists()は、パラメーター2が配列であり、nullが指定されていることを想定しています-Cakephp 3

  6. 6

    Cakephpデータは、リクエストごとに更新する代わりに挿入されます

  7. 7

    Cakephp3はコントローラーで承認されています

  8. 8

    CakePHP2.4-DBアップデートが渡されたすべてのデータを保存しない1つのフィールドが永続化されることはありません

  9. 9

    CakePHPはなぜnullに関連付けられているのですか?

  10. 10

    CakephpでAjaxによって送信されたデータを取得する方法は?

  11. 11

    CakePHP 3 モデルとしてテーブルを返す PostgreSQL 関数を使用するにはどうすればよいですか?

  12. 12

    cakephp3を使用したクエリでさまざまなデータソースを使用するにはどうすればよいですか?

  13. 13

    Cakephp 3.3.0-RC1:ヘッダーはすでに送信されています

  14. 14

    CakePHP 3.xの関連テーブルからオブジェクトとしてデータを受信する方法(現在は配列として受信)

  15. 15

    なぜcakephp3.xコントローラーとテーブルの関数は公開されているのに、エンティティの関数は保護されているのですか?

  16. 16

    DateTimeがブートストラップdatetimepickerを使用してcakephp3.xに正しく保存されない

  17. 17

    cakePHP3ではどのバージョンのFoundationが使用されていますか?

  18. 18

    Cakephpフォームは送信されていません

  19. 19

    CakePHP3.xにはGroupByが含まれています

  20. 20

    CakePhpはajaxによって要求されたJavaScriptファイルにタイムスタンプを追加していますか?

  21. 21

    CakePHP 3 - Creating hiddenField

  22. 22

    Save associations with Cakephp 3

  23. 23

    CakePHPと条件

  24. 24

    cakephp3を使用して異なるデータベースから関連モデルを取得する

  25. 25

    CakephpとAngularjsを使用してフォーマットされたテキストをmysqlに保存する

  26. 26

    関連するモデルを処理して、cakephpでアクションを追加するにはどうすればよいですか?

  27. 27

    Cakephp3はデータを保存できますが、関連付けを保存できません

  28. 28

    モデルが保存されないのはなぜですか?(CakePHP 2.x)

  29. 29

    グループ化して、cakephpが期待される結果を返さないことを数えます

ホットタグ

アーカイブ