かなり長い間問題と戦っていますが、問題を解決する良い方法が見つかりません。
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()
}
読んでくれてありがとう。下手な英語を許してください。