开发者问题收集

消息:“未定义索引:SKU”

2020-07-22
456

当我执行 dd($data); 时,所有数据都会显示出来,但是当我删除 dd 并简单地提交我的表单时,问题总是出现未定义的索引 sku。

这是我的产品属性控制器

public function addProductAttributes(Request $request){
    if($request->isMethod('post')){
        $data=$request->all();
        foreach($data['sku'] as $key => $value){
            if($value != null){
                $attr = new ProductsAttribute();
                $attr->product_id = $data['product_id'][$key];
                $attr->sku = $data['sku'][$key];
                $attr->stock=$data['stock'][$key];
                $attr->price= $data['price'][$key];
                $attr->size= $data['size'][$key];
                $attr->status= $data['status'][$key];
                $attr->save();
            }
        }

    }
    if($request->expectsJson()){
        return response()->json([
            'message'=>'Product has been Update Successfully',
        ]);
    };
}

这是我的产品属性模板。这是在 Vue js 中动态添加/删除输入字段,因此我可以添加多个数据数组

   <form role="form"  method="POST"   @submit.prevent="addProductAttribute">
                <table >
            
            <tbody>
                 <tr v-for="(attr,index) in attribute" :key="index">
                <td><input type="text" v-model="product_id"  class="form-control"></td>
                <td><input type="text" v-model="attr.sku" placeholder="SKU" class="form-control"></td>
                <td><input type="text" v-model="attr.size" placeholder="Size" class="form-control"></td>
                <td><input type="text" v-model="attr.stock" placeholder="Stock" class="form-control"></td>
                <td><input type="text" v-model="attr.price" placeholder="Price" class="form-control"></td>
                <td><input type="text" v-model="attr.status" placeholder="Status" class="form-control"></td>
                <td><a @click="addAttribute()"  v-show="index == attribute.length-1" title="Add More Product Attribute"><i class="fas fa-plus" style="color: #00b44e"></i></a> <a title="Remove" @click="removeAttribute(index)" v-show="index || ( !index && attribute.length > 1)"><i class="fas fa-minus" style="color: red"></i></a></td>
            </tr>
            </tbody>
            <tfoot>
                <tr><button type="submit"  class=" btn-outline-primary btn-lg">Add</button></tr>
            </tfoot>

        </table>
            </form>

我的脚本文件是

<script>
export default {
    mounted() {
        let app = this;
        let id = app.$route.params.id;
        app.product_id = id;
        this.readProductAttribute();
    },
    data(){
        return{
            product_id:'',
            product_name:'',
            attributes:[],
            product:'',
           attribute:[
                {
                    product_id:'',
                    sku:'',
                    price:'',
                    stock:'',
                    size:'',
                    status:'',
                }
            ]
        }
    },
    methods: {
        removeAttribute(index){
            this.attribute.splice(index, 1);
            
        },
        addAttribute(){
            this.attribute.push({ size: '',sku:'',price:'',stock:'',status:'' });
        },
       
     
        addProductAttribute: function(e){

           axios.post(`/admin/add-product-attribute`,{
               myArray: this.attribute
           })
               .then(function(response){
                   console.log(response);
               })
        }
    }
}
1个回答

您的数据位于键“myArray”内,因此将循环更改为以下内容应该有助于解决您的错误。

foreach($data['myArray'] as $key => $value){

每个属性的访问逻辑也有缺陷。您应该只在其键上访问它,其次,似乎 product_id 并不总是存在于您的数据中,因此如果键不存在,您可以使用 nullcoalescent 返回空字符串。

$attr->product_id = $data['product_id'] ?? '';
$attr->sku = $data['sku'] ?? '';
$attr->stock=$data['stock'] ?? '';
$attr->price= $data['price'] ?? '';
$attr->size= $data['size'] ?? '';
$attr->status= $data['status'] ?? '';
mrhn
2020-07-22