关系无法正常工作

时间:2018-08-07 14:19:41

标签: php laravel relation

我目前正在学习有关Laravel的在线课程,并且在某些关系上遇到困难。我最近3个小时一直在寻找错误,但找不到。

基本上,我有一个用户填写的表格,以及一个他要加载图片的字段。对于该图片,我在数据库中有两个单独的表(照片-包含有关该照片和用户的信息-应该将photo_id放到哪里)。我按照课程中的所有步骤进行操作,但是在数据库中插入图片后,关系无法正常工作。我将在下面提供所有代码。

用户照片关系:

public function photo(){
    return $this->belongsTo('App\Photo');
}

将表单数据保存在数据库中并在控制器中创建图片:

public function store(UsersRequest $request)
{
    $input = $request->all();

    if ($file = $request->file('photo_id')){

        $name = time().$file->getClientOriginalName();
        $file->move('images', $name);
        $photo = Photo::create(['file'=>$name]);
        $input['photo_id'] = $photo->id;
    }

    $input['password'] = bcrypt($request->password);
    User::create($input);

    return redirect('/admin/users');
}

这是我的图片的表单输入字段:

<div class="form-group">
    {!! Form::label('photo_id','Photo: ') !!}
    {!! Form::file('photo_id', null , ['class'=>'form-control']) !!}
</div>

这段代码不会给我任何错误,但是我的关系无法正常工作。照片表没有填充任何数据,在我的用户表中,photo_id列填充了照片名称,而不是应有的ID。

非常感谢您的帮助。如果我忘了在这里提供其他任何信息,请告诉我。

2 个答案:

答案 0 :(得分:0)

根据您所说的,Photo模型应包含:

public function user()
{
    return $this->belongsTo(User::class)
}

用户模型应包含:

public function photo()
{
    return $this->hasOne(Photo::class);
    // Or maybe this should be photos() and
    //return $this->hasMany(Photo::class);
} 

具有关系的常见陷阱是确保id字段正确,例如:photos表具有user_id字段

在处理关系如何工作时,我建议与“工匠修补匠”一起使用,这样您就可以将它们简单地与其余代码隔离地进行检查。

答案 1 :(得分:0)

就像ChungNguyễnTrần一样,我认为文件上传无法正常工作。

这里的常见错误是未使用'files' => true打开该表单。 另请参阅文档:https://laravelcollective.com/docs/5.2/html#file-input

所以您应该这样做:

echo Form::open(['url' => 'foo/bar', 'files' => true]);