当我选中复选框时,在我的表单中没有错误,但是当我不想选中复选框时,我收到错误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"和"状态"不能为空
有什么帮助吗?
在控制器中,您检查status
和feature_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_item
和status
1:
修改数据库 您可以修改数据库中的表,并为feature_item
和status
字段设置默认值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["状态"]执行类似
操作