laravel - 数据透视表中的 detach()
问题描述
无法弄清楚如何从数据透视表中删除记录。
我有带数据透视表users
的 belongsToMany 。documents
document_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)
。我试过这个,但不起作用
解决方案
您可以通过以下几种方式执行此操作:
首先,您可以使用 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();
}
希望这可以帮助!
推荐阅读
- javascript - 显示基于单选选项的内容点击 Javascript
- node-opcua - 安全令牌确实过期了,应该被丢弃!!!!(寿命 = 60000 )
- php - PHP : DOM 解析器来迭代 html 代码
- azure - 针对 Azure Functions 中预加载的 Nuget 包的更高版本
- blueprism - 无法在网站上监视 html 元素
- jsf - p:dataTable 上的“拖放”事件方法未调用
- javascript - Meteor 帐户-facebook 无法选择使用 https 来重定向_uri
- amazon-web-services - 使用 AWS 和修补程序部署策略的 Terraform
- java - 如何在java中获取对象的大小
- java - Log4J 未写入日志文件