2

かなり長い間問題と戦っていますが、問題を解決する良い方法が見つかりません。

2 つのテーブルがあるとします。

uses (id, name)

uses_phone (id, user_id, phone)

users (1, 'Mary')と彼女の電話を作成したとします。users_phones (1, 1, '123') (2, 1, '333')

Mary を更新したい場合、彼女の名前を「Maria」に変更するには:

このsave()メソッドは 内の実際のレコードを削除しませんusers_phoneが、insert新しいエントリを削除すると、次のようになります。

1, 1, 123 2, 1, 333 3, 1, 123 4, 1, 333

この問題を解決する最善の方法はどれですか? 私は少し混乱しています。私は PHQL の代わりにモデルを使用するのが好きです (私もそれが好きですが、ORM を使用したモデルは魔法のようです)。

編集:コードを追加

モデルの関係とコントローラーの簡略化されたバージョンを含めるように投稿を更新しました

モデル関係:

class Users {
  ...
  $this->hasMany('xid', 'UsersTelephones', 'xid_user', ['alias' => 'UsersTelephones']);
  ...
}

class UsersTelephones { 
   ...
   $this->belongsTo('xid_user', '\Users', 'xid', ['alias' => 'Users']);
   ...
}

(非常に単純化された)コントローラーコード:

function update($xid) {
   ...
   $user = Users::findFirstByXid($xid);
   // $user->email = "..";

   $user_tfs = array();
   for ($i=0;$i<count($tfs_array);$i++)
   {
      $user_tfs[$i] = new UsersTelephones();
      $user_tfs[$i]->tf_number = $tfs_array[$i];
   }
   $user->UsersTelephones = $user_tfs;

   // ...

   $user->save()
}

読んでくれてありがとう。下手な英語を許してください。

4

1 に答える 1