使用Laravel验证处理这种情况的正确方法

时间:2018-08-02 08:35:40

标签: laravel validation laravel-validation

我是Laravel的新手,我想对如何处理这种情况提出一些指示。

我有两个实体:广告和提名。广告可以有很多提名。

在控制器中,我收到两个外部输入:都需要[ad_id]和[nomination_id]。

我与这两个输入有关的是:

  • 检查[ad_id]是否为现有的广告实体,并且其“活动”属性为true。

  • 检查[nomination_id]是现有的提名实体。

  • 仅当[ad_id]是现有广告并且[nomination_id]是现有提名检查时,此提名才属于此广告。

您能给我看一个例子,说明如何仅使用验证类来管理它吗?

4 个答案:

答案 0 :(得分:2)

您可以这样编写验证规则

public function rules()
{
    return [
        'ad_id' => [
            'bail',
            'required',
            Rule::exists('ads')->where(function ($query) use ($request) {
                $query->where([
                    ['active' => 1],
                    ['id' => $request->ad_id]
                ]);
            }),
        ],
        'nomination_id' => [
            'bail',
            'required',
            Rule::exists('nominations')->where(function ($query) use ($request) {
                $query->where([
                    ['ad_id' => $request->ad_id],
                    ['id' => $request->nomination_id]
                ]);
            }),
        ],
    ];
}

假设提名表中有adsnominations是表名,主键字段是idad_id作为外键。

答案 1 :(得分:1)

这非常简单-您可以编写验证规则,就像在问题中列出验证规则一样

pickerActivity(){
alert("PICKER PRESSED")
}

render(){
return(
<Picker
  onPress={this.pickerActivity()}
  selectedValue={this.state.language}
  style={{ height: 50, width: 100 }}
  onValueChange={(itemValue, itemIndex) => this.setState({language: itemValue})}>
  <Picker.Item label="Java" value="java" />
  <Picker.Item label="JavaScript" value="js" />
</Picker>
)
}

答案 2 :(得分:0)

$inputAd = <some_value>;
$inputNomination = <some_value>;

$nomination = Nomination::where(['id' => $inputNomination])->with(['ads'])->first();

if(!$nomination || !($nomination->ad_id == $inputAd)) {
    // not the same
}

// same

答案 3 :(得分:0)

要验证ad_idnomination_id,可以使用laravel in规则。

FormRequest类

public function rules()
{

    return [
        'ad_id'         =>  [
                                'required',
                                Rule::in(Ad::where('active', true)->pluck('id')->toArray()),
                            ],
        'nomination_id' =>  [
                                'required',
                                Rule::in(Nomination::where('id', $this->nomination_id)->where('ad_id', $this->ad_id)->pluck('id')->toArray()),
                            ],
    ];
}

Rule::in(Ad::where('active', true)->pluck('id')->toArray()),规则将检查ad_id的ID数组中是否存在Ad,其中active字段为true

Rule::in(Nomination::where('id', $this->nomination_id)->where('ad_id', $this->ad_id)->pluck('id')->toArray()),规则将检查nomination_idNomination相关的ID数组中是否存在Ad