我是Laravel的新手,我想对如何处理这种情况提出一些指示。
我有两个实体:广告和提名。广告可以有很多提名。
在控制器中,我收到两个外部输入:都需要[ad_id]和[nomination_id]。
我与这两个输入有关的是:
检查[ad_id]是否为现有的广告实体,并且其“活动”属性为true。
检查[nomination_id]是现有的提名实体。
仅当[ad_id]是现有广告并且[nomination_id]是现有提名检查时,此提名才属于此广告。
您能给我看一个例子,说明如何仅使用验证类来管理它吗?
答案 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]
]);
}),
],
];
}
假设提名表中有ads
和nominations
是表名,主键字段是id
和ad_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_id
和nomination_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_id
与Nomination
相关的ID数组中是否存在Ad
。