【问题标题】:Laravel update - Image uploaded file path not stored in databaseLaravel 更新 - 图片上传的文件路径未存储在数据库中
【发布时间】:2018-10-05 21:27:13
【问题描述】:

我有一个包含多个字段的表格,如下所示。

当我更新表单时,只有 large_image 字段会更新,thumbnail_image 不会更新。

我的表单

<form action="/update', $id)}}" enctype="multipart/form-data" method="post" files="true">
<input type="text" name="name">  
<input type="file" name="large_image" multiple="false" accept="image/x-png, image/jpeg">
<input type="file" name="thumb_image" multiple="false" accept="image/x-png, image/jpeg">
<input type="submit">

型号

class Item extends Model {
protected $fillable = ['name', 'large_image', 'thumb_image'];
}

控制器

public function update((Request $request, $id){
$requestData = $request->all();

$item= Item::findOrFail($id);
if ($request->hasFile('large_image')) 
  {
    $fileName = $request->file('large_image')->getClientOriginalName();
    $fileExt = $request->file('large_image')->getClientOriginalExtension();
    $fullFileName = $fileName.'_'.time().'.'.$fileExt;

    $path = public_path('images');
    Image::make($fileName)->save($path . DIRECTORY_SEPARATOR. $fullFileName);

    $requestData['large_image'] = "images/{$fullFileName}";
    }



    if ($request->hasFile('thumb_image')) 
    {
        $file = $request->file('thumb_image');

        {
            $file_thumb = $request->file('thumb_image')->getClientOriginalName();

            $file_thumb_Ext = $request->file('thumb_image')->getClientOriginalExtension();
            $fullfile_thumb = $file_thumb.'_'.time().'.'.$filethumb_Ext;

            $path_thumb = public_path('images/thumb');

            Image::make($file)->save($path_thumb . DIRECTORY_SEPARATOR. $fullfile_thumb);
        }
        $requestData['thumb_image'] = "images/thumb/{$fullfile_thumb}";

    }


   $item->update($requestData);
}

我在这里缺少什么?但是这两个图像都已上传,并且图像路径在 create 方法中写入数据库。

【问题讨论】:

  • 在这里大吃一惊,但这是因为if ($request-&gt;hasFile('thumb_image) 块中的额外荣誉({})吗?好像你不能在 PHP 中做到这一点:3v4l.org/rVnWX
  • 我尝试删除它,但没有成功。图片上传到images/thumb,但不在数据库中。
  • 更改 $requestData['large_image'] = "images/{$fullFileName}";到 $item->large_image = "images/{$fullFileName}";然后使用 $item->save();
  • 是的,它似乎有效。为什么会这样?对于一张图片$requestData['large_image'] = "images/{$fullFileName}" 有效,为什么不为$requestData['thumb_image'] = "images/{$fullfile_thumb}"
  • 展示你的模特老兄!

标签: database laravel controller eloquent


【解决方案1】:

型号

thumb_image 替换为 thumbnail_image,因为您在表 thumbnail_image

class Item extends Model {
   protected $fillable = ['name', 'large_image', 'thumbnail_image'];
}

控制器

控制器中的相同操作将键值 thumb_image 替换为 thumbnail_image,因为您在表中具有列名 thumbnail_image

替换

$requestData['thumb_image']

$requestData['thumbnail_image']

public function update((Request $request, $id){
$requestData = $request->all();

$item= Item::findOrFail($id);
if ($request->hasFile('large_image')) 
  {
    $fileName = $request->file('large_image')->getClientOriginalName();
    $fileExt = $request->file('large_image')->getClientOriginalExtension();
    $fullFileName = $fileName.'_'.time().'.'.$fileExt;

    $path = public_path('images');
    Image::make($fileName)->save($path . DIRECTORY_SEPARATOR. $fullFileName);

    $requestData['large_image'] = "images/{$fullFileName}";
    }



    if ($request->hasFile('thumb_image')) 
    {
        $file = $request->file('thumb_image');

        {
            $file_thumb = $request->file('thumb_image')->getClientOriginalName();

            $file_thumb_Ext = $request->file('thumb_image')->getClientOriginalExtension();
            $fullfile_thumb = $file_thumb.'_'.time().'.'.$filethumb_Ext;

            $path_thumb = public_path('images/thumb');

            Image::make($file)->save($path_thumb . DIRECTORY_SEPARATOR. $fullfile_thumb);
        }
        $requestData['thumbnail_image'] = "images/thumb/{$fullfile_thumb}";

    }


   $item->update($requestData);
}

希望这对你有用。

【讨论】:

  • 你找到解决办法了吗?
  • 更改模型:protected $fillable = ['name', 'large_image', 'thumbnail_image'];在控制器中进行更改:$requestData['thumbnail_image'] 您使用了列名“thumbnail_image”,并在控制器中传递键名,模型中的列名是“thumb_image”。
【解决方案2】:

你的模型是:

class Item extends Model {
    protected $fillable = ['name', 'large_image', 'thumb_image'];
}

现在看看你的数据库,列名不同,所以模型应该是这样的:

class Item extends Model {
    protected $fillable = ['name', 'large_image', 'thumbnail_image'];
}

祝你好运!

【讨论】:

    猜你喜欢
    • 2018-06-19
    • 1970-01-01
    • 2023-04-09
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多