如何解决laravel中的此错误:ErrorException(E_WARNING)为foreach()提供的参数无效

时间:2018-07-25 12:20:42

标签: laravel

我正在创建药店发票系统。因此,在此过程中,我正在创建一个发票表单,其中客户信息和发票信息存储在两个不同的模型“客户模型”和“发票模型”中。

下面的我的发票表单查看代码;

<form action="{{url('/invoice')}}" method="post">
{{csrf_field()}}
<div class="form-row">
    <div class="col-md-4 col-md-offset-2">
        <label for="customerName">Customer Name:</label>
        <input type="text" id="customerName" name="customerName" class="form-control"><br>

        <label for="address"> Address:</label>
        <input type="text" id="address" name="address" class="form-control"><br>

        <label for="mobile"> Mobile No.:</label>
        <input type="text" id="mobile" name="mobileNumber" class="form-control"><br>



    </div>

    <div class="col-md-4">
        <label for="invoiceNo"> Invoice No.:</label>
        <input type="text" id="invoiceNo" name="invoiceNum" class="form-control"><br>

        <label for="date"> Date:</label>
        <input type="date" id="date" name="date" class="form-control"><br>

    </div>

</div>
<hr>
<table class="table table-bordered" cellpadding="10px" cellspacing="5px">
    <thead>
    <th>Meidicine Name:.</th>
    <th>Quantity</th>
    <th>Price</th>
    <th>Total Price</th>
    <th style="text-align: center"><a href="#" class="addRow"><i class="fas fa-plus-square plus "></i></a></th>

    </thead>
    <tbody>

    <tr>

        <td>

            <select name="medicineName" id="" class="form-control-sm medicineName" >
                @foreach($data as $item)
                <option value="{{$item->id}}">{{$item->medicineName}}</option>
                @endforeach
            </select>
        </td>
        <td><input type="number" class="form-control-sm quantity" name="quantity"></td>
        <td><input type="number" class="form-control-sm price" name="price"></td>
        <td><input type="number" class="form-control-sm totalAmount" name="totalAmount"></td>
        <td style="text-align: center"><a href="#" class="btn btn-danger remove"><i class="fas fa-times"></i></a></td>

    </tr>

    <tr><td><input type="submit" class="btn btn-info btn-sm" value="ADD"></td></tr>

    </tbody>

</table>
</form>

在此发票表格中,药品名称来自使用laravel雄辩关系的另一种“药品”模型

我的InvoiceController在下面存储方法代码

  public function store(Request $request)
{
    $customer = new Customer();

    $customer->fill($request->all());
    if($customer->save()){

        $id = $customer->id;
        foreach($request->medicineName as $value => $key)  --->error occurs 
                                                                this line
            {

            $data = array(
                'customer_id' => $id,
                'medicine_id' => $value,
                'invoiceNum' => $request->invoiceNum[$key],
                'date'       =>$request->date[$key],
                'quantity'   =>$request->quantity[$key],
                'price'      =>$request->price[$key],
                'totalAmount'=> $request->totalAmount[$key]
            );
        Invoice::insert($data);

        }
    }

    return back();

}

当我单击“添加”按钮提交数据时,两种不同的模型“客户和发票”浏览器可能会显示错误外观
“ ErrorException(E_WARNING) 为foreach()提供了无效的参数”

如何解决这类错误,请任何人都可以帮助我。

1 个答案:

答案 0 :(得分:1)

这是因为$request->medicineName只是一个元素,而不是数组或集合,因此请尝试如下操作:

public function store(Request $request)
{
    $customer = new Customer();

    $customer->fill($request->all());
    if($customer->save()){

        $id = $customer->id;

        $data = array(
            'customer_id' => $id,
            'medicine_id' => $request->medicineName,
            'invoiceNum' => $request->invoiceNum,
            'date'       =>$request->date,
            'quantity'   =>$request->quantity,
            'price'      =>$request->price,
            'totalAmount'=> $request->totalAmount
        );
        Invoice::insert($data);
    }

    return back();

}