상당한 시간 동안 문제가 발생하여 문제를 해결할 수없는 좋은 방법을 찾을 수 없습니다.Phalcon - ORM 저장으로 인해 업데이트 중 중복 된 항목이 발생했습니다.
의 나는 두 개의 테이블이 있다고 가정 해 봅시다 :
uses (id, name)
uses_phone (id, user_id, phone)
나는 users (1, 'Mary')
와 그녀의 전화를 만든 가정 할 users_phones (1, 1, '123') (2, 1, '333')
나는 그녀의 이름을 변경, 마리아를 업데이트하려면 "마리아":
save()
방법은 users_phone
에서 실제 레코드를 삭제하지 않지만 새 항목을 insert
것, 그리고 내가 가진 것
1, 1, 123 2, 1, 333 3, 1, 123 4, 1, 333
을이 문제를 해결하는 가장 좋은 방법입니다 무엇입니까? 나는 약간 혼란 스럽다. 나는 PHQL 대신 Model을 사용하기를 좋아한다. (나는 역시 좋아하지만, ORM 모델은 quie magic으로 보인다.)
편집 : 추가 코드 나 모델 관계와 내 컨트롤러의 단순화 된 버전
모델 관계를 포함하는 내 게시물을 업데이트 한
:
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()
}
나쁜 영어를 읽어 주셔서 감사합니다. $tfs_array
의 출처에서, 먼저
1) :
당신이 기록을 저장하는 데 사용되는 코드 질문을 업데이트 할 수 있습니다
여기에 더 많은 링크입니까?또한 모델 afterSave() 또는 기타 유사한 이벤트 메소드를 확인하십시오. –
또한 모델 연관 정의를 게시하십시오. – YOMorales
두 가지 의견을 모두 주셔서 감사 드리며 질문을 업데이트했습니다. 검토해 주시기 바랍니다. 고맙습니다! – candlejack