首页 > 解决方案 > 数据透视表中的 detach()

问题描述

无法弄清楚如何从数据透视表中删除记录。

我有带数据透视表users的 belongsToMany 。documentsdocument_user

这是我的附加方法:

public function share(Request $request, $company_id, $id)
{
    $document = Document::find($id);
    $user = $request['user'];
    $document->users()->attach($user);
    flash('Document has been shared!');
    return back();
}

但是如何实现分离功能呢?我应该为此建立一个表格,应该是什么功能?类似的东西$document->users()-detach($user)。我试过这个,但不起作用

标签: laravelpivot

解决方案


您可以通过以下几种方式执行此操作:

首先,您可以使用 detach() 功能(需要控制器中的第二个功能)。使用与您提供的格式类似的示例:

public function unshare(Request $request, $id)
{
    $document = Document::findOrFail($id);
    $userId = $request['user']; //Assuming this is the User ID
    $user = User::findOrFail($userId);
    $user->documents()->detach($document->id);
    flash('Document has been detached!');
    return back();
}

其次,您可以创建一个切换关联的函数。本质上,您发送一个文档 ID,如果它已经与用户相关联,则它是分离的,如果它未与用户相关联,那么它将附加。

public function share(Request $request, $id)
{
    $document = Document::findOrFail($id);
    $userId = $request['user']; //Assuming this is the User ID
    $user = User::findOrFail($userId);
    $user->documents()->toggle($document->id); //This can also be an array of IDs
    flash('Document has been toggled!'); //You might want to pass something or look up the association if you want custom messaging for attach or detach
    return back();
}

希望这可以帮助!


推荐阅读