Обновить несколько строк с вставкой новых данных в laravel - PullRequest
0 голосов
/ 10 апреля 2020

Я новичок в Laravel, здесь мои существующие поля обновляются, но не могут вставить новую строку, когда пользователи проверяют новую категорию, она должна быть добавлена ​​как новая строка в базе данных.

public function update(Request $request, $id)
{
    $this->validate($request, [
        'name' => 'required',
        'shop_id' => 'required',
        'sub_category_id' => 'sometimes|required|',
        'is_visible' => 'required',
        'is_active' => 'required',
    ]);
    try {
         $product = Product::find($id);
         $product->name = $request->name;
         $product->shop_id = $request->shop_id;
         $product->is_visible = $request->is_visible;
         $product->is_active = $request->is_active;
         $product->save();



         foreach($request->category_id as $key =>$v){

            $data = array(

                'product_id'=>$id,
                'category_id'=> $v,
                'sub_category_id'=>isset($request->sub_category_id [$key])?$request->sub_category_id [$key]:null,
                'total_quantity'=>$request->total_quantity [$key],
                'quantity_unit'=>$request->quantity_unit [$key]
            );


            $ewast = EwasteItem::where('product_id','=',$id)->where('category_id','=',$request->category_id [$key])->get();

            if ($ewast) {
                $ewasteitem = EwasteItem::where('product_id',$id)->where('category_id',$v);
                $ewasteitem->update($data);
            } else {
                 EwasteItem::insert($data);
            }
        }
        return \Redirect::route('ewaste.index')->with('successMessage', 'Product Updated Successfully.');
    } catch (ModelNotFoundException $e) {
        return $e;
    }
}

check boxes are categories

1 Ответ

1 голос
/ 10 апреля 2020

Обновите также foreach l oop следующим образом

foreach($request->category_id as $key =>$v) {

    $data = array(

        'product_id'=>$id,
        'category_id'=> $v,
        'sub_category_id'=>isset($request->sub_category_id [$key])?$request->sub_category_id [$key]:null,
        'total_quantity'=>$request->total_quantity [$key],
        'quantity_unit'=>$request->quantity_unit [$key]
    );

    $ewasteitem = App\EwasteItem::updateOrCreate(
        ['product_id' => $id, 'category_id' => $v],
        $data
    );
}

, проверьте, что в вашей модели App \ EwasteItem есть массив $ fillable и в нем есть элемент 'product_id'

protected $fillable = ['product_id', ...other_column_names];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...