Php 将照片路径存储在laravel中的db中

Php 将照片路径存储在laravel中的db中,php,laravel,laravel-4,Php,Laravel,Laravel 4,我正在尝试向用户配置文件添加徽标,我通过两个模型(承包商和徽标)和一对一的关系来实现这一点 我正在将徽标正确上传到uploads/logo,但我无法在徽标表中存储任何内容 我确信我忽略了什么,是否有任何建议: 我的用户控制器:ContractorController.php*注意:我在视图中使用dropzone.js public function logo_upload($id){ $input = Input::all(); $rules = array( 'file'

我正在尝试向用户配置文件添加徽标,我通过两个模型(承包商和徽标)和一对一的关系来实现这一点

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

我确信我忽略了什么,是否有任何建议:

我的用户控制器: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();
    }
}
我的承包商模型:

 function logo() {
    return $this->hasOne('Logo', 'contractror_id');
}
我的徽标模型:

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

您只需交换以下代码:

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);
}
它没有到达在数据库中保存
路径
的代码,因为在此之前您是从脚本返回的,因此
返回
之后的代码不会执行。顺便说一句,我只是从你的问题中复制了代码,并对其进行了一些小的修改,以便不确定你保存的代码是否有效


更新:更新代码以保存相关模型。检查如何在上保存相关型号。

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

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

我转而接受你的建议,这很有道理。我的保存代码中一定有错误,因为站点返回“尝试获取非对象的属性”error@retrograde,在您的
Logo
模型中添加
protected$guarded=array()
。我已切换代码,现在收到此错误:{“error”:{“type”:“Symfony\\Component\\Debug\\Exception\\FatalErrorException”,“message”:“在非对象上调用成员函数logo(),”文件“:“\/Applications\/MAMP\/htdocs\/contractorSherpa\/app\/controllers\/ContractorController.php”,“line”:181}然后您的
$contractor=contractor::find($id);
没有返回任何内容,如果您通过
dd($contractor)获得
contractor
模型,请尝试调试
::find()
之后,确保
$id
是正确的,并且您有一个
id
的记录。我不确定dd($contractor)的输出应该是什么,但是当我添加它并删除contractor::find($id)下面的所有内容时,上传会起作用。该id已经通过显示在查看页面上{{$contractor->name}}在表单和记录之前存在,并且可以通过我的其他表单编辑。我切换到了您的代码,在我看来似乎可以工作,但我得到了以下错误:{“error”:{“type”:“illumb\\Database\\elount\\MassAssignmentException”,“message”:“name”,“file”:\/Applications\/MAMP\/htdocs\/contractorSherpa\/vendor\/laravel\/framework\/src\/illumb\/Database\/elount\/Model.php,“line”:344}