2017-12-23 19 views
1

私はかなりの時間問題を抱えています。私は問題を解決する良い方法を見つけることができません。Phalcon - ORM保存の重複エントリを使用して更新する

のは、私は2つのテーブルがあるとしましょう:

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

この問題を解決するための最良の方法はどれ?私は少し混乱しています。私はModelをPHQLの代わりに使うのが好きです(私も好きですが、ORMのモデルはquie magicと思われます)。

EDIT:

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):

+0

レコードを保存するために使用されるコードであなたの質問を更新することができます。ここでは

は、より多くのリンクがありますか?モデルafterSave()や他の同様のイベントメソッドを必ず確認してください。 –

+0

また、お持ちのモデル関連定義を投稿してください。 – YOMorales

+0

両方のコメントをいただきありがとうございます、私は私の質問を更新しました、それを確認してください。ありがとうございました! – candlejack

答えて

1

お使いのコントローラのコードを見て、私はいくつかの提案がありますか? (あなたが$tfs_arrayにレコードIDを追加する必要があります)$user_tfs[$i]->id = $tfs_array[ID_OF_RECORD];

2)また、同様に、既存の電話レコードのid$user_tfs[$i]オブジェクトに追加したい場合があります。この方法では、ORMは、オブジェクトにid主キーがあるため、レコードがすでに存在すると解釈できます。

3)なぜ新しい名前を保存したいのであれば、UsersTelephonesオブジェクトを繰り返し追加したいのですか?あなたはまた、代わりにsave()$model->update()メソッドを呼び出すことができます

$user = Users::findFirstByXid($xid); 
$user->name = 'New Name'; 
$user->save(); 

4):あなたは次のように行くことができます。 https://docs.phalconphp.com/en/3.2/db-models#create-update-records https://docs.phalconphp.com/en/3.2/db-models#create-update-with-confidence https://docs.phalconphp.com/en/3.2/db-models-relationships#updating-related-records

+0

こんにちは! '$ tfs_array'は以前のバリデーションなどから来た文字列のベクトルです。問題は '' POST'から新しい '$ tfs_array'を取得したことです。削除するとIDを割り当てる方法は? (そして、私はユーザが他のテーブルにも多くのフィールドを持ち、相違をチェックしたくないので、すべてを編集しています)// – candlejack

+0

'Users :: findFirstByXid($ xid);'そのユーザーと – YOMorales

+0

**現在の電話機を**削除/更新**できますか?空の配列を代入しても削除できない場合は、私はそれに従うことはありません – candlejack

関連する問題