Php 将照片路径存储在laravel中的db中
我正在尝试向用户配置文件添加徽标,我通过两个模型(承包商和徽标)和一对一的关系来实现这一点 我正在将徽标正确上传到uploads/logo,但我无法在徽标表中存储任何内容 我确信我忽略了什么,是否有任何建议: 我的用户控制器:ContractorController.php*注意:我在视图中使用dropzone.jsPhp 将照片路径存储在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'
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}