我被卡在一个问题中,找不到解决方案,这很烦人。
我有两个表,一个叫做“contacts”,另一个叫做“phonebooks”,它们与第三个表“contacts_phonebooks”相关联,这是一个多对多的关系,概述如下:
contacts:id(主键) phonebooks:id(主键) contacts_phonebooks:contactid(外键),phonebooksid(外键)
非常简单和清晰,它可以工作。
我正在使用Laravel 4和Eloquent ORM,当我需要获取、插入和删除时一切都正常,但是当我需要更新联系人时我失败了。我有一个表单,里面有一些复选框,代表所有的电话簿(每个复选框的名字为phonebook[]),所以当你勾选其中一个时,电话簿的ID将会保存在*contacts_phonebooks*中,与联系人的ID对应。
问题是这并不正确!我的意思是,当我运行以下代码时:
它会删除与联系人ID相关的*contacts_phonebooks*中的每一行,并仅保存新选择的一行...我知道这很奇怪,我会更好地解释一下。我想要更新Mr.x,他实际上在“Stackoverflow”电话簿中,我希望将他添加到“Nerd”电话簿中,所以我点击更新并选择了“Nerd”,另一个已经被选择。当我更新时,系统会删除“Stackoverflow”链接,并仅保存“Nerd”电话簿(使用上面的代码),这让我很疯狂,因为Laravel 4文档说您应该使用sync()方法来更新多对多关系。我不知道如何解决它,希望你能理解我的问题。干杯。
我有两个表,一个叫做“contacts”,另一个叫做“phonebooks”,它们与第三个表“contacts_phonebooks”相关联,这是一个多对多的关系,概述如下:
contacts:id(主键) phonebooks:id(主键) contacts_phonebooks:contactid(外键),phonebooksid(外键)
非常简单和清晰,它可以工作。
我正在使用Laravel 4和Eloquent ORM,当我需要获取、插入和删除时一切都正常,但是当我需要更新联系人时我失败了。我有一个表单,里面有一些复选框,代表所有的电话簿(每个复选框的名字为phonebook[]),所以当你勾选其中一个时,电话簿的ID将会保存在*contacts_phonebooks*中,与联系人的ID对应。
问题是这并不正确!我的意思是,当我运行以下代码时:
$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文档说您应该使用sync()方法来更新多对多关系。我不知道如何解决它,希望你能理解我的问题。干杯。