SQLSTATE[23000]:完整性约束冲突:1048 列 'feature_item' & status' 不能为 null



当我选中复选框时,在我的表单中没有错误,但是当我不想选中复选框时,我收到错误SQLSTATE[23000]:1048列"feature_item"和"状态"不能为空。

1.my 产品表:-

public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->increments('id');
$table->integer('category_id');
$table->string('product_name');
$table->string('product_code');
$table->string('product_color');
$table->text('description'); 
$table->boolean('feature_item')->default(0);
$table->boolean('status')->default(0);
$table->timestamps();
});
}

2.my 产品刀片.php这是我的表格

<div class="control-group">
<label class="control-label">Feature Item</label>
<div class="controls">
<input type="checkbox" name="feature_item" id="feature_item" value="1">
</div>
</div>

<div class="control-group">
<label class="control-label">Status</label>
<div class="controls">
<input type="checkbox" name="status" id="status" value="1">
</div>
</div>

3.my 产品控制器

public function addproduct(Request $request){
$product->category_id=$request['category_id'];
$product->product_name=$request['product_name'];
$product->product_code=$request['product_code'];
$product->product_color=$request['product_color'];
$product->description=$request['description'];
$product->feature_item=$request['feature_item'];
$product->status=$request['status'];
if (!empty($request['description'])) {
$product->description = $request['description'];
} else {
$product->description = '';
}
if(empty($request['feature_item'])){
$feature_item='0';
}else{
$feature_item='1';
}
$product->status=$request['status'];
if (empty($request['status'])) {
$status = '0';
} else {
$status = '1';
}
$product->save();
return back()->with('success','product Upload Successfully!');
}

我得到这个错误:

SQLSTATE[23000]:完整性约束冲突:1048 列"feature_item"和"状态"不能为空

有什么帮助吗?

在控制器中,您检查statusfeature_item是否为空,但您没有定义应该写入模型的内容 在这种情况下,您只是将值分配给变量,这些变量永远不会再使用。

要解决此问题,请将这些值分配给产品属性以确保它们得到保存。

if (empty($request['feature_item'])){
$product->feature_item = '0';
} else {
$product->feature_item = '1';
}
if (empty($request['status'])) {
$product->status = '0';
} else {
$product->status = '1';
}

这是因为当您不选中复选框
时,不会以名称feature_item&status
发送到控制器,然后控制器中的方法尝试将nothing插入数据库
解决方案中的feature_itemstatus

1:

修改数据库 您可以修改数据库中的表,并为feature_itemstatus字段设置默认值false;

阿拉伯数字:

像这样检查控制器中的这两个字段

if (empty($request['feature_item']))
$product->feature_item = '0';
if (empty($request['status']))
$product->status = '0';

你添加这两行

$product->feature_item=$feature_item;
$product->status=$status;
$product->save();

>$product->feature_item=$request['feature_item'];

作业前检查是否

$request["feature_item"];

是否有一些值,当您没有选中复选框时,$request['feature_item'] 没有 vale。 您有条件检查,您可以使用

if(empty($request['feature_item'])){
$feature_item='0';
}else{
$feature_item='1';
}

要使用此功能,请删除

$product->feature_item=$request['feature_item'];

此行和添加行

$product->feature_item= $feature_item;

所以,它看起来像

if(empty($request['feature_item'])){
$feature_item='0';
}else{
$feature_item='1';
}
$product->feature_item= $feature_item;

检查空后和保存到数据库之前。对$request["状态"]执行类似

操作

最新更新