laravel-5.7:SQLSTATE[HY000]:一般错误:1364字段';类别标识';不';没有默认值

laravel-5.7:SQLSTATE[HY000]:一般错误:1364字段';类别标识';不';没有默认值,laravel,eloquent,laravel-5.7,Laravel,Eloquent,Laravel 5.7,我是Laravel的新手,尝试在类别下添加产品,但当我添加产品时,它会显示此错误: SQLSTATE[HY000]:一般错误:1364字段“category_id”没有默认值(SQL:insert intoproducts…) 最初我添加这些产品时,没有将其添加到任何类别下,而现在它没有添加到类别下 有谁愿意为我提供解决方案吗 这是我的表格: {{csrf_field()} 类别下 品名 未选择文件选择文件 div class=“表单操作”> 这是产品控制器: ProductsControll

我是Laravel的新手,尝试在
类别下添加
产品
,但当我添加
产品
时,它会显示此错误:


SQLSTATE[HY000]:一般错误:1364字段“category_id”没有默认值(SQL:insert into
products
…)

最初我添加这些产品时,没有将其添加到任何类别下,而现在它没有添加到
类别下

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

这是我的表格:

{{csrf_field()}
类别下
品名
未选择文件选择文件
div class=“表单操作”>
这是
产品控制器

ProductsController.php

public function addProduct(请求$Request)
{
如果($request->isMethod('post'))
{
$data=$request->all();
$product=新产品;
$product->product_name=$data['product_name'];
$product->product_code=$data['product_code'];
$product->product_color=$data['product_color'];
如果(!empty($data['description']))
{
$product->description=$data['description'];
}
其他的
{
$product->description='';
}
$product->price=$data['price'];
//上传图像
如果($request->hasFile('image'))
{
$image_tmp=Input::file('image');
如果($image\u tmp->isValid())
{
$extension=$image_tmp->getClientOriginalExtension();
$filename=rand(11199999)。'..$extension;
$large_image_path='images/backend_images/products/large/'。$filename;
$medium\u image\u path='images/backend\u images/products/medium/'。$filename;
$small_image_path='images/backend_images/products/small/'。$filename;
//调整图像大小
Image::make($Image\u tmp)->save($large\u Image\u path);
Image::make($Image\u tmp)->resize(600600)->save($medium\u Image\u path);
Image::make($Image\u tmp)->调整大小(300300)->保存($small\u Image\u path);
//在products表中存储图像名称
$product->image=$filename;
}
}
$product->save();
/*return redirect()->back()->带有('flash_message_success','Product has added successfully!')*/
返回重定向('/admin/view products')->带有('flash_message_success','Product has added successfully!');
}
$categories=Category::where(['parent_id'=>0])->get();
$categories\u drop\u down=“选择”;
foreach($类别为$cat)
{
$categories_drop_down.=''.$cat->name.'';
$sub_categories=Category::where(['parent_id'=>$cat->id])->get();
foreach($sub_类别为$sub_类别)
{
$categories_drop_down.=“-”$sub_cat->name.”;
}
}
返回视图('admin.products.add_product')->带有(compact('categories_drop_down');
}

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

$product->category_id = NULL;

如果需要,您可以在

上找到有关可为空的更多信息这里的主要问题是,在您的迁移中,您的category_id不可为空,这意味着它应该从控制器分配一个值。您可以从控制器为其分配一个值,也可以转到迁移文件并添加此行

$table->integer('catagory_id')->nullable();
然后您将重新划分表,它不应该再次抛出此错误,但我更希望您为它指定一个值,如果您有关系或希望将其连接到它的东西,但如果您没有关系,那么在我看来整个
category\u id
是无用的


如果要为其赋值,则应在新产品线之后在控制器中执行以下操作:

$product->category_id = $request->input('category_id');
因为您的控制器没有获取名为的输入值

category_id

尽管有更好的方法来解决这个问题,但直接的解决方案是设置产品的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'];

现在它说从空值创建默认对象,并将上面的代码高亮显示在$product=new product之后;它对您有效吗?这次是哪一个?SQLSTATE[HY000]:一般错误:1364字段“category_id”没有默认值bro m使产品与类别的关系变为可空,并且m也给它赋值,但我不知道为什么它不工作控制器中有任何错误,因为它被编辑了?我没有看到你给它赋值bro你给它赋值名称code颜色描述价格和文件名及其扩展名任何建议您愿意完成此任务吗?或者我如何为其赋值您应该在新产品行$product->category\u id=$request->input('category\u id')之后在控制器中执行类似操作;bcs当您初始化新产品时,您的控制器没有获取名称为category_id的输入值,您没有设置category_id。
if($request->isMethod('post'))
在此块集中设置类别id。错误会通知您问题所在。这不是Laravel的问题,而是DB配置的问题,这实际上是您想要的行为。我认为如果您向我们展示您的Post和类别模型类,会很有帮助。