使用Laravel正确上传文件

时间:2014-08-14 17:45:58

标签: php file-upload laravel-4 eloquent

我在Laravel工作的照片上传系统遇到了一些麻烦。到目前为止,我有文件进入并保存在公共/图像/配置文件中,但我无法弄清楚如何使用正确的信息将其插入到数据库中。目前我正在“调用未定义的方法Illuminate \ Database \ Eloquent \ Collection :: save()”错误。

在我的控制器中,我正在尝试通过这样做来插入它:

public function updatePhotos($id)
{
    if(Input::hasFile('image'))
    //If file is being added 
    {
        $extension = Input::file('image')->getClientOriginalExtension();
        $fileName = str_random(9).'.'.$extension;

        $user = User::find($id);
        $user->profile->photo->type = 1;
        $user->profile->photo->filename = $fileName;
        $user->profile->photo->save();

        Input::file('image')->move('public/images/profiles/',$fileName);
    }
}

在照片模型中:

public function profile()
{
    return $this->hasOne('Profile');
}

在个人资料模型中,我有:

public function photo()
{
    return $this->hasMany('Photo','user_id','user_id');
}

有人能为我发送正确的课程吗?

由于

1 个答案:

答案 0 :(得分:0)

您正在尝试保存用户模型,您必须创建一个新的照片模型,用数据填充并保存。

public function updatePhotos($id)
{
    $image = new Image();
    $image->user_id = Auth::id();
    $image->fill(Input::all());

    if (Input::hasFile('file')) {
        $file             = Input::file('file');
        $image->extension = $file->guessClientExtension();
        $image->size      = $file->getClientSize();
        $image->filename  = str_random(9) . '.' . $image->extension;
        $uploadSuccess    = $file->move('public/images/profiles/', $image->filename);

        $image->save();

        $user = User::find($id);
        $user->image = $image->id;
        $user-save();
        }
    }
}
  • 已创建新图像对象。
  • 图像对象上的字段user_id设置为当前用户ID。
  • 所有fillable字段都填写了表单中的数据。
  • 如果输入有文件,则文件设置为$image->user_id = Auth::id();
  • 在图像对象上设置图像扩展名,大小和文件名。
  • 将图像移动(放置)在public/images/profiles/文件夹中。
  • 保存图像对象。
  • 获取用户对象,为image字段分配图像ID并保存用户对象。