当前位置:  开发笔记 > 编程语言 > 正文

删除Eloquent记录之间的关系

如何解决《删除Eloquent记录之间的关系》经验,为你挑选了1个好方法。

我创建了两个扩展Eloquent(联系人和标签)的类,它们具有ManyToMany关系.我正在尝试创建取消标记联系人的方法,但是无法找到任何文档来告诉如何删除关系表中的条目而不删除标记本身或联系人.

到目前为止,我已经尝试过了

$contact = Contact::find($contact_id);
$tag = $contact->tags->where('id', '=', $id);
$tag->delete();

这只会删除联系人.它有意义,它不起作用,但我不知道还有什么可以尝试.我不想删除联系人或标签,只是两者之间的关系.

我现在也尝试过:

$tag = Tag::find($id);
$tag->contacts->detach($contact_id);

这给了我错误:

Builder.php第2071行中的BadMethodCallException:调用未定义的方法Illuminate\Database\Query\Builder :: detach()

以及

$tag = Tag::find($id);
$contact = $tag->contacts->find($contact_id);
$tag->contacts->detach($contact);

这给了我错误:

Tag.php第34行中的FatalErrorException:调用未定义的方法Illuminate\Database\Eloquent\Collection :: detach()

Contacts和Tags类都扩展了Illuminate\Database\Eloquent\Model;



1> andrewtweber..:

您可以使用detach多对多关系

http://laravel.com/docs/5.1/eloquent-relationships#inserting-many-to-many-relationships

您只需传入标签的ID即可.记下"标签"后面的括号

$contact->tags()->detach($id);

因为它是多对多的,你也可以反过来做

$tag->contacts()->detach($contact_id);

同样,您可以使用attach创建关系.只是猜测,因为你不知道分离,你可能也可以使用附加.Attach可以使用单个ID或ID数组(以及一些更高级的选项)

$contact->tags()->attach($id);
$contact->tags()->attach([$id1, $id2, ...]);

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有