【问题标题】:Remove relationship between Eloquent records删除 Eloquent 记录之间的关系
【发布时间】:2015-12-01 19:43:34
【问题描述】:

我创建了两个扩展 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;

【问题讨论】:

  • 我的问题是,当我尝试使用分离时,我这样做了:$tag->contacts->detach($id) 当我应该做 $tag->contacts()- >分离($id)。

标签: laravel-5 eloquent many-to-many laravel-5.1 detach


【解决方案1】:

您可以将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, ...]);

【讨论】:

  • 我试过了,得到了错误:“Builder.php 第 2071 行中的 BadMethodCallException:调用未定义的方法 Illuminate\Database\Query\Builder::detach()”
猜你喜欢
  • 2013-01-05
  • 2021-08-16
  • 2015-05-14
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-20
相关资源
最近更新 更多