laravel-5.7: SQLSTATE [HY000]: общая ошибка: 1364 Поле 'category_id' не имеет значения по умолчанию - PullRequest
0 голосов
/ 13 января 2019

Я новичок в Laravel и пытаюсь добавить Product в Category, но когда я добавляю Product, он показывает эту ошибку:

SQLSTATE [HY000]: общая ошибка: 1364 Поле 'category_id' не имеет значения по умолчанию (SQL: вставить в products ... "

Изначально я добавлял эти продукты без какой-либо категории, с которой он работал, и теперь он не добавляется под Category.

Может кто-нибудь предпочел бы предоставить мне свое решение?

вот моя форма:

  <form enctype="multipart/form-data" class="form-horizontal" method="post" action="{{ url('admin/add-product') }}" name="add_product" id="add_product" novalidate="novalidate">{{ csrf_field() }}
          <div class="control-group">
            <label class="control-label">Under Category</label>
            <div class="controls">
              <select name="category_id" id="category_id" style="width:220px;">
                <?php echo $categories_drop_down; ?>
              </select>
            </div>
          </div>
          <div class="control-group">
            <label class="control-label">Product Name</label>
            <div class="controls">
              <input type="text" name="product_name" id="product_name">
            </div>
          </div>
  <div class="uploader" id="uniform-undefined"><input name="image" id="image" type="file" size="19" style="opacity: 0;"><span class="filename">No file selected</span><span class="action">Choose File</span></div>
  div class="form-actions">
            <input type="submit" value="Add Product" class="btn btn-success">
          </div>
        </form>

здесь ProductsController:

ProductsController.php

public function addProduct(Request $request)
{
    if ($request->isMethod('post'))
    {
        $data = $request->all();

        $product = new Product;
        $product->product_name = $data['product_name'];
        $product->product_code = $data['product_code'];
        $product->product_color = $data['product_color'];
        if ( ! empty($data['description']))
        {
            $product->description = $data['description'];
        }
        else
        {
            $product->description = '';
        }
        $product->price = $data['price'];

        // Upload Image
        if ($request->hasFile('image'))
        {
            $image_tmp = Input::file('image');
            if ($image_tmp->isValid())
            {
                $extension = $image_tmp->getClientOriginalExtension();
                $filename = rand(111, 99999) . '.' . $extension;
                $large_image_path = 'images/backend_images/products/large/' . $filename;
                $medium_image_path = 'images/backend_images/products/medium/' . $filename;
                $small_image_path = 'images/backend_images/products/small/' . $filename;
                // Resize Images
                Image::make($image_tmp)->save($large_image_path);
                Image::make($image_tmp)->resize(600, 600)->save($medium_image_path);
                Image::make($image_tmp)->resize(300, 300)->save($small_image_path);
                // Store image name in products table
                $product->image = $filename;
            }
        }

        $product->save();

        /*return redirect()->back()->with('flash_message_success','Product has been added successfully!');*/

        return redirect('/admin/view-products')->with('flash_message_success', 'Product has been added successfully!');
    }

    $categories = Category::where(['parent_id' => 0])->get();
    $categories_drop_down = "<option value='' selected disabled>Select</option>";

    foreach ($categories as $cat)
    {
        $categories_drop_down .= "<option value='" . $cat->id . "'>" . $cat->name . "</option>";
        $sub_categories = Category::where(['parent_id' => $cat->id])->get();
        foreach ($sub_categories as $sub_cat)
        {
            $categories_drop_down .= "<option value='" . $sub_cat->id . "'>&nbsp;&nbsp;--&nbsp;" . $sub_cat->name . "</option>";
        }
    }

    return view('admin.products.add_product')->with(compact('categories_drop_down'));
}

Ответы [ 3 ]

0 голосов
/ 13 января 2019

Основная проблема, с которой вы здесь столкнулись, заключается в том, что в вашей миграции category_id не имеет значения nullable, что означает, что ему должно быть присвоено значение из контроллера, вы можете либо присвоить ему значение из своего контроллера, либо перейти к перенести файл и добавить эту строку

$table->integer('catagory_id')->nullable();

Затем вы перенастроите таблицу, и она не должна снова выдавать эту ошибку, но я предпочитаю, чтобы вы присваивали ей значение, если у вас есть отношения или что-то, что вы хотите подключить к нему, но если у вас нет отношений тогда все category_id бесполезно с моей точки зрения

Если вы хотите присвоить ему значение, вы должны сделать что-то подобное в вашем контроллере после новой линейки продуктов:

$product->category_id = $request->input('category_id');

потому что ваш контроллер не принял значение входа с именем

category_id
0 голосов
/ 14 января 2019

Несмотря на то, что были бы лучшие способы написать эту проблему, непосредственное решение было бы установить поле category_id вашего Продукта.

$product->product_name = $data['product_name'];
$product->product_code = $data['product_code'];
$product->product_color = $data['product_color'];

// Add this:
$product->category_id = $data['category_id'];
0 голосов
/ 13 января 2019

Поскольку ошибка подразумевает, что она не имеет значения по умолчанию, вы можете решить ее, либо создав миграцию (или пересмотрев ту, что у вас была), чтобы столбец category_id обнулялся, либо просто добавьте следующую строку в продукт создание:

$product->category_id = NULL;

Дополнительную информацию о nullable можно найти, если нужно, по адресу Документация по миграции Laravel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...