我陷入了一个问题,我找不到解决方案,这让我很烦。
我有两张表,一张称为联系人,另一张称为电话簿,它们与第三张名为 *contacts_phonebooks* 的表链接,这是一个多对多关系总结如下:
- 联系人:id (pk)
- 电话簿:id (pk)
- Contacts_phonebooks: contactid (fk), phonebooksid (fk) 非常简单明了,而且很有效。
我正在使用 Laravel 4 和 Eloquent ORM,当我必须获取它、插入它并删除它时,一切正常,但是当我需要更新联系人时,我惨遭失败。我有一个表格,它有许多代表所有电话簿的复选框(每个复选框都有电话簿 [] 作为名称),因此当您选中其中一个时,电话簿 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?";
}
它会删除 *contacts_phonebooks* 中与联系人 ID 关联的每一行,并仅保存选中的新行...我知道这很奇怪,我试图更好地解释它。我想更新 Mr.x 而他实际上在“Stackoverflow”电话簿中,我想将他添加到“Nerd”电话簿中,所以我点击更新并选择了“Nerd”,另一个已经被选中。
当我更新他时,系统会删除“Stackoverflow”链接并只保存“Nerd”电话簿(带有上面的代码)这让我发疯了,因为 Laravel 4 Doc 说你应该使用sync()方法来更新多对多的关系。
我不知道如何解决它,我希望你能理解我的问题。
干杯。