在我的应用程序中,每件产品都必须有图像。以下是我上传图片的方式。当我上传产品详细信息时,图像路径不会保存到数据库中。
我的laravel日志中没有错误显示。我正确地保存了图像吗?
public function update(ProductRequest $request, $id)
{
try {
Event::fire(new ProductBeforeSave($request));
$product = Product::findorfail($id);
if ( $request->hasFile('image'))
{
$path = $request->file('image')->store('uploads/catalog/images');
// ensure every image has a different name
$file_name = $request->file('image')->hashName();
// save new image $file_name to database
$product->saveProduct($request);
$product->images()->update(['product_id' =>$product->id ,'path' => $file_name]);
}
else
{
return redirect()->back()->with('error', 'No Image uploaded');
}
Event::fire(new ProductAfterSave($product, $request));
} catch (\Exception $e) {
throw new \Exception('Error in Saving Product: ' . $e->getMessage());
}
图片
public function products()
{
return $this->belongsTo(Product::class);
}
产品
公共职能图片()
{
return $this->hasMany(ProductImage::class);
}
答案 0 :(得分:0)
你们的关系有问题。
其次,你不能像这样更新多对多的关系
$product->images()->update(['product_id' =>$product->id ,'path' => $file_name]);
您的查询中需要where
子句。
$product->images()->where("some condition")->update(['product_id' =>$product->id ,'path' => $file_name]);
希望这有帮助
答案 1 :(得分:0)
在上面的代码中,我假设您要添加新图像而不是更新现有关系。
create()
命令适用于该关系,您也不需要“product_id”字段,因为这将是h
// Create a new image for the product
$product->images()->create(['path' => $file_name]);
现在全文如下
public function update(ProductRequest $request, $id)
{
/* ... */
try {
Event::fire(new ProductBeforeSave($request));
$product = Product::findorfail($id);
if ($request->hasFile('image'))
{
$path = $request->file('image')->store('uploads/catalog/images');
// ensure every image has a different name
$file_name = $request->file('image')->hashName();
// save new image $file_name to database
$product->saveProduct($request);
// Create a new image for the product
$product->images()->create(['path' => $file_name]);
}
else
{
return redirect()->back()->with('error', 'No Image uploaded');
}
Event::fire(new ProductAfterSave($product, $request));
} catch (\Exception $e) {
throw new \Exception('Error in Saving Product: ' . $e->getMessage());
}
/* ... */
}
你的模型也是错误的(正如@Hiren指出的那样)。这些模型只有其他Eloquent类的关系。
<强>产品强>
public function images()
{
return $this->hasMany(ProductImage::class);
}
图片强>
public function product()
{
return $this->belongsTo(Product::class);
}
同样明智的是,图像只属于一种产品(一对多关系),您使用上述名为“产品”的功能。