当前位置: 首页 > 知识库问答 >
问题:

Laravel-使用复选框从透视表中删除多个数据

谈灵均
2023-03-14

我正在尝试使用复选框进行标记删除。假设用户有大约10个产品,每个产品都有3个不同的标签。

当前用户只能删除单个标记。每次标记删除后,页面刷新,他可以删除另一个标记。这不是真正的用户友好。这就是为什么我尝试对标记进行多重选择,并在单击一个按钮时删除所有选定的标记。

这就是它现在的样子:

{!! Form::open(['action' => 'ProductController@detach', 'method' => 'post']) !!}
<div class="container">
    <div class="table-responsive">
            <thead>
            <tr>
                <th>Product</th>
                <th>Tags</th>
            </tr>
            </thead>
            <tbody>
            @foreach($products as $product)
                <tr>
                    <td>{{ $product->name }}</td>
                    <td>
                        @foreach($product->tags as $tag)
                            {!! Form::hidden('tag_id', $tag->id) !!}
                            <input type="checkbox" name="xxxxx" value="{{ xxxx }}"><br>
                        @endforeach
                    </td>
                </tr>
            @endforeach
            </tbody>
        </table>
    </div>
</div>

{!! Form::button('Delete') !!}
{!! Form::close() !!}

我的问题是我需要产品id标签id来分离它们。

如果按delete(删除)按钮,则会将此数据传递到控制器:

{"tag_id":["285","284","285","286","279"],"product_id:"22"}

主要的问题是,我的程序只给了我最后一个产品id。不管我是否从这个产品中选择了任何标签。它总是给我这个产品的id。我还需要像一个多数组一样的东西传递给我的控制器来使用。

像这样的东西会很完美:

[0] = product_id = 1 
      tag_id = 50,60,80
[1] = product_id = 2
      tag_id = 11,22,33 
....

我对你的答复是:

很抱歉我迟到了...

我试过了,效果几乎完美。唯一的问题是,如果两个不同的产品有相同的标签,我的程序将只html" target="_blank">返回最后一个产品和他的标签。例如:

产品标识1和产品标识2具有标签标识3。

作为输出,我需要:product_id1:tag_id 3,product_id2:tag_id 3

但是我只得到最后一个传递了标签的产品id,所有其他具有相同标签id的产品都被忽略。所以我得到的结果是:

product_id2tag_id3

我希望你能理解我想说的。。我的英语不是最好的。。

共有2个答案

许法
2023-03-14

表单复选框

您可以通过复选框值传递标签id和产品id。

@foreach($product->tags as $tag)
<input type="checkbox" name="tagProductInfos[]" value="{{ $tag->id.'-'.$product->id }}"><br>
@endforeach

控制器接收功能:

然后,接收该值并分离标签id、产品id。

    foreach($request->get('tagProductInfos') as $tagInfo){
        $explodedData = explode('-',$tagInfo);
        $tagId = $explodedData[0] ; //is tag Id
        $productId = $explodedData[1] ; //is product Id
        echo 'tagId='.$tagId.'  productId='.$productId.'<br>';
    }
甄正信
2023-03-14

您可以像这样将复选框作为数组字段传递,键作为标记id,值为产品id,

@foreach($product->tags as $tag)
 <input type="checkbox" name="tagtodelete[{{ $tag->id.'-'.$product->id }}]" value="{{ $product->id }}"><br>
@endforeach

在您的控制器中,您可以以数组的形式获取值,

$tagsleftoffs = (array) $request->input('tagtodelete');
foreach($tagsleftoffs as $tagId => $productId){
//perform your action here
$productId = explode('-',$tagId);
echo $productId[0] ; //is tag Id
echo $productId[1] ; //is product Id
}
 类似资料:
  • 您好,当我更新或删除API中的数据时,我需要有关laravel 8多对多关系透视表的帮助。这些是我的文件信息。首先,我创建了两个表:Companies(迁移文件) 联系人(迁移文件) 在此之后,创建透视表company\u contact(迁移文件) 模型如下所示:公司模型 } 联系人模型 } 我的路线文件 我的公司控制人 } 公司存储请求 公司资源 也许有人可以帮助我在公司控制器中编写正确的st

  • 问题内容: 我是一起定义关系和框架的新手,我只是习惯于原始SQL。我做了家庭作业(google + Laravel文档),但是我认为我不太了解它。 以下是相关信息:用户表: 挑战表: User_challenge_links Challenge_sub_categories 所以我的目标..用户->挑战。 关系: 一个用户有许多User_challenge_links 一个User_challen

  • 问题内容: 我很难解决多个复选框删除问题。有人可以指导我解决问题吗?此处应该发生的情况是,用户可以在框上打勾,然后单击“删除”按钮以删除被打勾的框。不幸的是,我的代码似乎无效。你能为我指出正确的方向吗? 问题答案: 此HTML: 应该: 该查询应为:

  • 我正在做一个拉拉维尔应用程序。在laravel中,我试图更新透视表中的一行。在此应用程序中,我有三个表: 问题:id,标题,描述 类别:id、名称 category_issues:(pivot table)id,issue_id,category_id 在laravel中,我试图更新透视表中的一行。我有以下关系: issue.php public function categories(){ re

  • 我在删除订单时遇到问题: 这里是按取消删除订单的表单: 这是我的路由器: > OrderController:删除函数: 公共函数delete(Order$Order){try{unlink(public_path().'/storage/orders/files/'.$Order- 因此,当点击按钮(取消)时,只需转到正确的url:when 21是订单id 而且它只是找不到页面!!!没有删除任何

  • 我对定义关系和框架都是新手,我只是习惯了原始SQL。我做了家庭作业(google Laravel文档),但我想我只是没有正确理解它。 以下是相关信息:用户表: 挑战表: 用户挑战链接 Challenge_sub_categories 所以我的目标...用户- 这些关系: 一个用户有很多User_challenge_links User_challenge_link有challenge_sub_ca