【问题标题】:Delete one entry from pivot table laravel从数据透视表 laravel 中删除一个条目
【发布时间】:2018-07-03 05:46:01
【问题描述】:

如果我有行的 id,如何从 laravel 中的多对多关系数据透视表中只删除一个条目?

【问题讨论】:

  • 您能否详细说明您的问题?
  • 我有 2 个与多对多相关的实体。例如,如果我有用户并且 user_id = 1(表中该用户的 2 个条目)如果我执行 users->entity()->detach(),它将删除 user_id = 1 的所有条目,我只想删除pivot->id = some_id_i_give 的条目

标签: laravel eloquent many-to-many


【解决方案1】:

解决了。我用过:

->wherePivot('id', '=', $pivot_id)->detach()

效果很好。

【讨论】:

  • 这不是我认为的最佳实践,因为 laravel 已经有一个方法。
【解决方案2】:

假设您有具有多对多关系的 UserEntity 模型。然后你可以使用

$user->entity()->detach($entityId);

这只会删除带有$entityId的行

【讨论】:

  • 如果 $entityId 在多个条目中怎么办?我认为它会删除所有这些
  • 它将删除匹配的“$userId”和“$entityId”。我假设您首先加载了预期的“$user”模型。
  • 我可以拥有 $userId 和 $entityId 多次...所以我不能依赖 userId-entityId 关系,我需要获取 pivot->id 以便我只能删除其中一个条目
  • 相同的 $userId & $entityId 对多次?!!好吧,答案是无关紧要的!
  • 如果 $userId 和 $entityId 对是唯一的,它就会起作用。感谢您的快速回复:)
【解决方案3】:

你可以这样做的最佳实践,

// Detach a single entity from the user...
$entity = Entity::find($your_entity_id);
$user->entities()->detach($entity->id);

首先,通过Entity模型找到你想要的id的实体,

$entity = Entity::find($your_entity_id);

获得实体后,可以将其传递给detach()方法,

$user->entities()->detach($entity->id);

欲了解更多信息,请通过this link

【讨论】:

  • 如果 entity->id 不在只有 1 个条目中怎么办?我可以将 userId = 1 和 entityId = 1 多次作为不同的条目。我只需要删除我选择的 pivot->id 的条目。这就是为什么我使用 wherePivot
猜你喜欢
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 2020-11-18
  • 2021-06-03
  • 2021-02-06
  • 1970-01-01
相关资源
最近更新 更多