私は問題に行き詰まり、これに対する解決策を見つけることができません。それは私を悩ませています。
2 つのテーブルがあり、1 つは連絡先と呼ばれ、もう 1 つは電話帳と呼ばれ、これらは *contacts_phonebooks* と呼ばれる 3 番目のテーブルにリンクされています。これは多対多の関係であり、以下に要約されています。
- 連絡先: ID (pk)
- 電話帳: id (pk)
- contact_phonebooks: contactid (fk), phonebooksid (fk) 非常に単純明快で、機能します。
私は Laravel 4 と Eloquent ORM を使用しています。取得、挿入、削除する必要がある場合はすべて正常に動作しますが、連絡先を更新する必要がある場合は惨めに失敗します。すべての電話帳を表す多数のチェックボックスがあるフォームがあります (すべてのチェックボックスには名前として phonebook[] があります)。そのため、それらの 1 つをチェックすると、電話帳 ID が連絡先 ID と共に *contacts_phonebooks* に保存されます。問題は、これが正しくないことです。つまり、このコードを実行すると:
$contact = Contact::find($id);
$contact->contact_name = Input::get('newCName');
$contact->contact_surname = Input::get('newCSurname');
$contact->contact_email = Input::get('newCEmail');
$contact->contact_phone = Input::get('newCPhone');
$contact->contact_birth = Input::get('newCDate');
$contact->phonebooks()->sync(Input::get('phonebook'));
if($contact->save())
{
return "TEST DONE?";
}
連絡先 ID に関連付けられている *contacts_phonebooks* のすべての行を削除し、チェックした新しい行のみを保存します...これは奇妙です。Mr.x を更新したいのですが、彼は実際には「Stackoverflow」の電話帳にいます。彼を「Nerd」の電話帳に追加したいので、更新をクリックして「Nerd」を選択しましたが、もう一方は既に選択されています。
彼を更新すると、システムは「Stackoverflow」リンクを削除し、「Nerd」電話帳のみを保存します(上記のコードを使用)。Laravel 4 Docでは、更新するにはsync()メソッドを使用する必要があると書かれているため、このことは私を夢中にさせます多対多の関係。
解決方法がわかりません。私の問題が何であるかを理解していただければ幸いです。
乾杯。