无法将图像路径保存到数据库

时间:2018-02-19 12:35:26

标签: php laravel

在我的应用程序中,每件产品都必须有图像。以下是我上传图片的方式。当我上传产品详细信息时,图像路径不会保存到数据库中。

我的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);
    }

2 个答案:

答案 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);
}

同样明智的是,图像只属于一种产品(一对多关系),您使用上述名为“产品”的功能。