Laravel - 使用复选框从pivot-table中删除多个数据

时间:2016-07-25 13:24:02

标签: php laravel pivot

我试图制作一个适用于复选框的标签删除。想象一下,用户有大约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() !!}

我的问题是我需要product_id + tag_id来分离它们。

如果我按下删除按钮,我将此数据传递给我的控制器:

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

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

这样的事情会很完美:

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

我对你的答复的回复:

对不起我迟到的回答......

我已经尝试过了,它几乎完美无缺。唯一的问题是,如果两个不同的产品具有相同的标签,我的程序将只返回带有其标签的最后一个产品。例如:

product_id 1和product_id 2有tag_id 3.

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

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

product_id2 : tag_id3.

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

2 个答案:

答案 0 :(得分:1)

您可以将复选框作为数组字段传递,使用键作为标记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
}

答案 1 :(得分:0)

表单复选框

您可以通过复选框值传递标记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>';
    }