laravel中的表复选框使用外键错误

时间:2017-09-12 09:38:02

标签: checkbox laravel-5.4 sql-delete

我有一个产品的复选框列表,我想删除所有数据,也可以使用复选框从其他表中的外键中删除。

以下是我所拥有的内容,我从我的表中创建了一个表单,该表单被路由以删除从复选框中检查的数据。

<form action="{{ route('admin.delproducts') }}" method="get" id="delprod">
    {{ csrf_field() }}

    <table class="table table-hover">                                    
        <thead>                        
            <tr>
              <th width="4%"></th>
              <th width="17%">SUB-CATEGORY</th>
              <th width="30%">PRODUCT NAME</th>
              <th width="10%">QTY</th>
              <th width="10%">STATUS</th>
              <th width="25%">UPDATED</th>                
            </tr>
        </thead>
        <tbody>
             @foreach($products as $key => $data)
            <tr>
                <td><input type="checkbox" name="products[]" value="{{ $data->product_id }}" />&nbsp;</td>                            
                <td><a href="#"> {{ $data->name }} </a></td>
                <td><a href="#"> {{ $data->product_name }} </a></td>
                <td><a href="#"> {{ $data->quantity }} </a></td>
                <td><a href="#"> {{ $data->status }} </a></td>
                <td>{{ $data->updated_at }}</td>                            
            </tr>
            @endforeach
        </tbody>
    </table>
    </form>
<p data-placement="top" data-toggle="tooltip" title="Delete"><button class="btn btn-danger btn-sm pull-right delbtn" data-title="Delete" data-toggle="modal" data-target="#delete" ><span class="glyphicon glyphicon-trash"></span></button></p>

我已经在表单外面制作了我的按钮,但我已经为它创建了一个javascript。

$(".delbtn").click( function() {
    $('#delprod').submit();
});

在我的控制器中这就是我所做的:

public function deleteProducts(Request $request) {

    Product::destroy($request->products);

    return redirect()->route('admin.product');
}

我收到错误,因为此Product表有一个表Product_image中的外键我怎样才能让控制器删除Product_image表中product_id的所有数据被选中复选框?

我尝试制作模型Product_image并在我的控制器中尝试了这个

Product_image::destroy($request->products); 

但是它给了我错误,因为它说它确实存在。在进行查询以删除复选框传递的外键时有任何建议吗? 。类似于从复选框中删除接受数组的查询。?

1 个答案:

答案 0 :(得分:0)

如果您在产品图片之间有关系,则可以执行此操作。 (我假设您的关系名称为state。Laravel destroy 函数不会删除关系。如果您没有定义productImage

如果要删除关系,则需要在迁移文件或数据库中直接定义onDelete。

onDelete('cascade')

之后你可以尝试使用destroy(不确定它是否会删除关系)如果不是那么你可以这样做

  $table
    ->foreign('product_id')
    ->references('id')
    ->on('product_image')
    ->onDelete('cascade');

如果没有关系,则需要手动删除关系数据。