在laravel中存储照片的路径

时间:2014-03-29 18:43:37

标签: php laravel laravel-4

我正在尝试为用户个人资料添加徽标,我通过两个模型(承包商和徽标)和一对一的关系来实现这一点。

我正在将徽标正确上传到上传/徽标,但我无法在徽标表中存储任何内容。

我注意到我忽略了什么,任何建议:

我的用户控制器:ContractorController.php *注意:我在视图中使用dropzone.js

public function logo_upload($id){

  $input = Input::all();
  $rules = array(
      'file' => 'image|max:3000',
  );

  $validation = Validator::make($input, $rules);

  if ($validation->fails())
  {
    return Response::make($validation->errors->first(), 400);
  }
    $file = Input::file('file');
    $destinationPath = 'uploads/logos';
    //$filename = $file->getClientOriginalName();
    $extension =$file->getClientOriginalExtension(); 
    $filename = str_random(12).".{$extension}";
    $upload_success = Input::file('file')->move($destinationPath, $filename);
    $path = Input::file('file')->getRealPath();

    if( $upload_success ) {
       return Response::json('success', 200);
    } else {
       return Response::json('error', 400);
    }

    if( $upload_success ) {
         $contractor = Contractor::find($id);
        $contractor->logo->name = Input::file('file')->getRealPath();
        $contractor->logo->contractor_id = $contractor;
        $contractor->save();
    }
}

我的conractor模型:

 function logo() {
    return $this->hasOne('Logo', 'contractror_id');
}

我的徽标模型:

public function contractor() {
    return $this->belongsTo('Contractor', 'contractor_id');
}

2 个答案:

答案 0 :(得分:0)

您只需交换以下代码:

if( $upload_success ) {
   return Response::json('success', 200);
} else {
   return Response::json('error', 400);
}

// This code is out of reach if return occurs
if( $upload_success ) {
    $contractor = Contractor::find($id);
    $contractor->logo->name = Input::file('file')->getRealPath();
    $contractor->logo->contractor_id = $contractor;
    $contractor->save();
}

如下所示:

if( $upload_success ) {
    $contractor = Contractor::find($id);
    $logo = new Logo(array('name' => Input::file('file')->getRealPath()));
    $contractor->logo()->save($logo);
    return Response::json('success', 200);
} else {
   return Response::json('error', 400);
}

它没有到达用于在数据库中保存path的代码,因为在此之前您正在从脚本返回,因此return之后的代码没有被执行。顺便说一句,我刚刚复制了你问题中的代码并通过小修改进行了交换,因此不确定你的保存代码是否正常工作。

更新:更新了保存相关模型的代码。检查如何在documentation上保存相关模型。

答案 1 :(得分:0)

按照Heera说明操作后,您还应该检查如何将任何内容存储到徽标表中。它应该是这样的:

$contractor = Contractor::find($id);
$logo = new Logo(array('name' => Input::file('file')->getRealPath()));
$contractor->logo()->save($logo);