【问题标题】:Relations not working properly关系不正常
【发布时间】:2018-08-07 14:19:40
【问题描述】:

我目前正在学习有关 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。

我真的很感激这里的任何帮助。如果我忘记在这里提供任何其他内容,请告诉我。

【问题讨论】:

  • 你能分享一下UsersRequest吗?我会将 photo_id 更改为 photo 以使所有内容更清晰(因为该字段应包含文件,而不是 id)
  • 这是我的用户请求:public function rules() { return [ 'name'=&gt;'required', 'email'=&gt;'required', 'password'=&gt;'required', 'role_id'=&gt;'required', 'is_active'=&gt;'required', ]; }
  • 而photo_id实际上应该包含照片的ID,并且上传的照片存储在另一个表中-照片(具有“文件”字段)

标签: php laravel relation


【解决方案1】:

像 Chung Nguyễn Trần 我认为文件上传工作不正常。

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

所以你应该这样做:

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

【讨论】:

  • 问题实际上就在这里。我用“文件”而不是“文件”打开表单。谢谢
【解决方案2】:

根据你的说法,照片模型应该包含:

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 字段

在掌握关系的运作方式时,我建议使用“工匠修补匠”,这样您就可以将这些与其余代码隔离开来进行检查。

【讨论】:

  • 我只是按照课程指导,做的一切都和导师一样,但由于某种原因,我没有得到相同的结果。当我尝试“return $request->all();”时我的 photo_id 显示为图像名称,而不是“id”。我会尝试使用 tinker 再次测试一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
  • 2011-10-12
  • 1970-01-01
  • 2021-05-11
  • 2014-01-08
  • 1970-01-01
相关资源
最近更新 更多