Laravel 拉维父子关系,不验证自己为父

Laravel 拉维父子关系,不验证自己为父,laravel,laravel-4,Laravel,Laravel 4,在拉威尔,我有一个项目表。一个项目可以是另一个项目的子项目。我将这种父子关系保存在同一个projects表中 编辑项目时,用户从选择框中选择父项目。但是,我希望阻止用户选择正在编辑的同一项目;作为父项目。这将导致循环,从而导致错误 我怎样才能做到这一点?我能想到的最好的解决方案是编写一个自定义的验证规则,然而,在这种情况下,我如何获得id属性来对照project_id字段进行检查?或者除了验证器,还有更好的解决方案吗 我知道我可以在选择框中排除该项目,但这不是正确的解决方案,如果有人篡改post

在拉威尔,我有一个项目表。一个项目可以是另一个项目的子项目。我将这种父子关系保存在同一个projects表中

编辑项目时,用户从选择框中选择父项目。但是,我希望阻止用户选择正在编辑的同一项目;作为父项目。这将导致循环,从而导致错误

我怎样才能做到这一点?我能想到的最好的解决方案是编写一个自定义的验证规则,然而,在这种情况下,我如何获得id属性来对照project_id字段进行检查?或者除了验证器,还有更好的解决方案吗

我知道我可以在选择框中排除该项目,但这不是正确的解决方案,如果有人篡改post数据并修改项目id值,将其设置为与正在编辑的项目相同的值,则将发生无限循环

更新: 以下是生成父项目输入的代码:

<div class="form-group">
    {{ Form::label('project_id', 'Parent Project:') }}
    {{ Form::select('project_id', [null => null] + Project::lists('name', 'id'), null, ['class' => 'form-control']) }}
</div>

如上所述,在选择框中不包含当前项目id不是一个合适的解决方案。应用程序仍然易受攻击。应该以更恰当的方式防止它。

只需检索关系,而不使用当前项目

  $project = Project::find($thisProject);
  $related = Project::where('project_id','=',$project->id)->where('id','!=',$project->id)->get();
假设你用的是刀片

  <select name="projects">
  @foreach($related as $r)
  <option value="{{$r->id}}">{{$r->projectName}}</option>
  @endforeach
  </select>

只需检索不包含当前项目的关系

  $project = Project::find($thisProject);
  $related = Project::where('project_id','=',$project->id)->where('id','!=',$project->id)->get();
假设你用的是刀片

  <select name="projects">
  @foreach($related as $r)
  <option value="{{$r->id}}">{{$r->projectName}}</option>
  @endforeach
  </select>

结果表明,解决方案非常简单,就像Laravel的各个方面一样

包括在内就足够了

'project_id' => 'different:id',
模型中的验证规则。语法


所有的验证类型都有Laravel 4的解释。

结果表明,解决方案非常简单,就像Laravel的各个方面一样

包括在内就足够了

'project_id' => 'different:id',
模型中的验证规则。语法


所有的验证类型都有Laravel 4的解释。

老实说,我只想在选择框中禁用它。最直接的方法。你介意发布一些代码吗?比如,如果项目id应该只包含父项,那么它为什么要包含它自己呢?它是一个编辑表单。它不仅仅包含父母。编辑表单中的选择框包含所有项目,因此用户可以将父项目更改为当前的任何项目。老实说,我只想在选择框中禁用它。最直接的方法。你介意发布一些代码吗?比如,如果项目id应该只包含父项,那么它为什么要包含它自己呢?它是一个编辑表单。它不仅仅包含父母。编辑表单中的选择框包含所有项目,因此用户可以将父项目更改为任何当前项目。