首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >laravel-5.7: SQLSTATE[HY000]:一般错误: 1364字段'category_id‘没有默认值

laravel-5.7: SQLSTATE[HY000]:一般错误: 1364字段'category_id‘没有默认值
EN

Stack Overflow用户
提问于 2019-01-13 20:33:26
回答 3查看 2.7K关注 0票数 0

我对Laravel并不熟悉,并且尝试在Category下添加Product,但是当我添加Product时,它显示了以下错误:

SQLSTATEHY000:一般错误: 1364字段'category_id‘没有默认值(SQL: insert insert products .“

一开始,我在添加这些产品时,并没有在任何类别下工作,而现在它没有在Category下添加。

有人愿意为我提供解决方案吗?

这是我的表格:

代码语言:javascript
复制
  <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

代码语言:javascript
复制
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'));
}
EN

回答 3

Stack Overflow用户

发布于 2019-01-14 01:00:08

尽管有更好的方法来编写这个问题,但是立即的解决方案将是设置产品的category_id字段。

代码语言:javascript
复制
$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'];
票数 2
EN

Stack Overflow用户

发布于 2019-01-13 20:48:35

这里的主要问题是,在您的迁移中,category_id是不可空的,这意味着它应该有一个从控制器分配给它的值,您可以从控制器为它分配一个值,或者您可以转到迁移文件并添加这一行。

代码语言:javascript
复制
$table->integer('catagory_id')->nullable();

然后您将重新迁移该表,它不应该再次抛出此错误,但我更希望您为它分配一个值,如果您有关系或希望将它连接到它的什么东西,但是如果您没有关系,那么在我的观点中,整个category_id是无用的。

如果您想给它赋值,那么在新产品线之后,您应该在控制器中这样做:

代码语言:javascript
复制
$product->category_id = $request->input('category_id');

因为您的控制器没有接受输入的值,输入的名称为

代码语言:javascript
复制
category_id
票数 1
EN

Stack Overflow用户

发布于 2019-01-13 20:37:27

正如错误所暗示的,它没有默认值,您可以通过创建迁移(或者修改已有的迁移)来解决这个问题,这样'category_id‘列是可空的,或者只需在产品创建中添加以下行:

代码语言:javascript
复制
$product->category_id = NULL;

如果需要,您可以在Laravel迁移文档上找到更多关于可空的信息。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54172964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档