【问题标题】:Laravel 4 Many to Many updateLaravel 4 多对多更新
【发布时间】: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


    【解决方案1】:

    文档说“同步方法接受一个 ID 数组放置在数据透视表上。此操作完成后,只有数组中的 ID 将位于模型的中间表上:”

    所以我认为您可能正在寻找的是attach()

    $contact->phonebooks()->attach(Input::get('phonebook'));

    那么你将不得不使用detach() 将他从另一个人中删除。

    【讨论】:

    • 这似乎有点奇怪,但它有效......流程是我每次都要使用 $contact->phonebooks()->detach() 然后 $contact->phonebooks ()->attach(输入::get('电话簿'))
    • 在这种情况下,您提供了错误的同步参数。检查我们创建的这个测试代码。 paste.laravel.com/F3b
    • 该数据透视表迁移的外键应该是整数,但显然它并不重要,因为它仍然有效。
    【解决方案2】:

    docs 中所述:sync 方法接受要放置在数据透视表上的 ID 数组。

    【讨论】:

      【解决方案3】:

      您的数据透视表应命名为 contact_phonebook 它在 Laravel 的文档中指定了这一点。

      【讨论】:

        猜你喜欢
        • 2014-07-17
        • 1970-01-01
        • 1970-01-01
        • 2021-06-01
        • 2014-09-28
        • 2014-09-02
        • 2020-08-01
        • 1970-01-01
        • 2014-07-24
        相关资源
        最近更新 更多