php - 需要帮助才能使其正常工作。试图将产品保存到数据库中,控制器收到信息但不保存?
问题描述
嗨,我正在使用表单创建新产品并将信息发送到控制器并将其保存到数据库中,表单确实发送数据,因为当我在控制器内执行日志时我可以看到它并且信息在那里,我不明白为什么它没有被保存到数据库中?
在这个例子中,我添加到产品中的数据很少,但可能更多的是价格和国家,以及商店功能中的东西,如标签和尺寸。
这是控制器中完整的存储功能
public function store(ProductSaveRequest $request)
{
DB::beginTransaction();
$product = new Product;
$product->fill($request->all());
$file = $request->file('image');
if ($file) {
$file = $request->file('image');
$filename = Uuid::uuid() . '.' . $file->getClientOriginalExtension();
$file->move('img/products', $filename);
$product->image = 'img/products/' . $filename;
}
$product->save();
Log::info($product);
if (!empty($request->get('prices'))) {
$prices = array_map(function ($item) use ($product) {
$item['product_id'] = $product->id;
return $item;
}, $request->get('prices'));
CountryProduct::insert($prices);
}
if ($request->has('tags')) {
$product->tags()->sync($request->get('tags'));
}
if ($request->has('sizes')) {
$product->sizes()->sync($request->get('sizes'));
}
if ($request->has('categories')) {
$productCategories = [];
foreach ($request->get('categories') as $item) {
if (key_exists('category_name', $item)) {
$category = Category::where('name', $item['category_name'])
->first();
} else if (key_exists('category_id', $item)) {
$category = Category::findOrFail($item['category_id']);
}
if (empty($category)) {
$category = new Category;
$category->name = $item['category_name'];
}
$category->type = $item['type'];
$category->save();
if (!empty($item['fields'])) {
foreach ($item['fields'] as $fieldItem) {
if (key_exists('field_name', $fieldItem)) {
$field = Field::where('name', $fieldItem['field_name'])
->first();
} else if (key_exists('field_id', $fieldItem)) {
$field = Field::findOrFail($fieldItem['field_id']);
}
if (empty($field)) {
$field = new Field;
$field->name = $fieldItem['field_name'];
$field->category_id = $category->id;
}
$field->save();
$productCategories[] = [
"field_id" => $field->id,
"category_id" => $category->id,
"product_id" => $product->id,
"value" => $fieldItem['value']
];
}
}
if (count($productCategories) > 0) {
ProductField::insert($productCategories);
}
ExportationFactor::insert($product);
}
$product->save();
DB::commit();
return $product;
}
}
这是 Log.info
local.INFO: {"discount":"1","code":"123","sku":"123","description_spanish":"123","description_english":"123","brand_id":"2","id":591}
当前的输出是我得到了一个成功的操作,它说它已成功添加,但是当我去查看它时它不存在。
解决方案
将您的commit
方法放在最后一个if
条件之外。
public function store(ProductSaveRequest $request)
{
DB::beginTransaction();
$product = new Product;
$product->fill($request->all());
$file = $request->file('image');
if ($file) {
$file = $request->file('image');
$filename = Uuid::uuid() . '.' . $file->getClientOriginalExtension();
$file->move('img/products', $filename);
$product->image = 'img/products/' . $filename;
}
$product->save();
Log::info($product);
if (!empty($request->get('prices'))) {
$prices = array_map(function ($item) use ($product) {
$item['product_id'] = $product->id;
return $item;
}, $request->get('prices'));
CountryProduct::insert($prices);
}
if ($request->has('tags')) {
$product->tags()->sync($request->get('tags'));
}
if ($request->has('sizes')) {
$product->sizes()->sync($request->get('sizes'));
}
if ($request->has('categories')) {
$productCategories = [];
foreach ($request->get('categories') as $item) {
if (key_exists('category_name', $item)) {
$category = Category::where('name', $item['category_name'])
->first();
} else if (key_exists('category_id', $item)) {
$category = Category::findOrFail($item['category_id']);
}
if (empty($category)) {
$category = new Category;
$category->name = $item['category_name'];
}
$category->type = $item['type'];
$category->save();
if (!empty($item['fields'])) {
foreach ($item['fields'] as $fieldItem) {
if (key_exists('field_name', $fieldItem)) {
$field = Field::where('name', $fieldItem['field_name'])
->first();
} else if (key_exists('field_id', $fieldItem)) {
$field = Field::findOrFail($fieldItem['field_id']);
}
if (empty($field)) {
$field = new Field;
$field->name = $fieldItem['field_name'];
$field->category_id = $category->id;
}
$field->save();
$productCategories[] = [
"field_id" => $field->id,
"category_id" => $category->id,
"product_id" => $product->id,
"value" => $fieldItem['value']
];
}
}
if (count($productCategories) > 0) {
ProductField::insert($productCategories);
}
ExportationFactor::insert($product);
}
}
DB::commit();
return $product;
}
推荐阅读
- laravel - 使用中间件清除缓存
- arduino - Esp32 摇杆鼠标
- python - 在 Python 中通过 Selenium 抓取 Google 地图
- python-3.x - VScode - Linux 风格的“信息/帮助”命令扩展
- c# - 如何在统一 c# 中切换?
- python-3.x - 环境变量适用于 Django 的服务器,但不适用于 Apache 服务器
- oracle - 如何使用没有连接的联合合并 3 个表?
- javascript - Vuejs 通过使用计算工作,但不能使用 heroku 上的数据工作
- sorting - DynamoDB BETWEEN 排序键与范围
- python - 如何在 Python 中将 uint256 转换为 uint80 以读取智能合约数据?