我对Laravel并不熟悉,并且尝试在Category下添加Product,但是当我添加Product时,它显示了以下错误:
SQLSTATEHY000:一般错误: 1364字段'category_id‘没有默认值(SQL: insert insert
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 . "'> -- " . $sub_cat->name . "</option>";
}
}
return view('admin.products.add_product')->with(compact('categories_drop_down'));
}发布于 2019-01-14 01:00:08
尽管有更好的方法来编写这个问题,但是立即的解决方案将是设置产品的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'];发布于 2019-01-13 20:48:35
这里的主要问题是,在您的迁移中,category_id是不可空的,这意味着它应该有一个从控制器分配给它的值,您可以从控制器为它分配一个值,或者您可以转到迁移文件并添加这一行。
$table->integer('catagory_id')->nullable();然后您将重新迁移该表,它不应该再次抛出此错误,但我更希望您为它分配一个值,如果您有关系或希望将它连接到它的什么东西,但是如果您没有关系,那么在我的观点中,整个category_id是无用的。
如果您想给它赋值,那么在新产品线之后,您应该在控制器中这样做:
$product->category_id = $request->input('category_id');因为您的控制器没有接受输入的值,输入的名称为
category_id发布于 2019-01-13 20:37:27
正如错误所暗示的,它没有默认值,您可以通过创建迁移(或者修改已有的迁移)来解决这个问题,这样'category_id‘列是可空的,或者只需在产品创建中添加以下行:
$product->category_id = NULL;如果需要,您可以在Laravel迁移文档上找到更多关于可空的信息。
https://stackoverflow.com/questions/54172964
复制相似问题