【发布时间】:2013-07-29 20:06:55
【问题描述】:
我遇到了一个问题,找不到解决办法,这让我很烦。
我有两张表,一张名为 contacts,另一张名为 phonebooks,它们与第三张表 *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() 方法来更新多对多关系。
我不知道怎么解决,希望你能理解我的问题。
干杯。
【问题讨论】:
标签: php database many-to-many laravel-4 eloquent