这有效
'expected_at' => 'date|after:"2016-04-09 10:48:11"',
或者这可行
$rules['expected_at'] = 'date|after:'.$opportunity->created_at;
这不起作用
'expected_at' => 'date|after:created_at',
" created_at"数据库中的值完全如下
2016-04-09 10:48:11
请注意,表单将使用以下格式将expected_at日期传递给验证程序
2016-04-09
我认为这意味着您无法直接在验证器中引用模型字段?
答案 0 :(得分:2)
在5.3的laravel文档中(我测试的版本):
您可以指定另一个要与日期进行比较的字段,而不是传递由strtotime评估的日期字符串:
'finish_date'=> '所需|日期|后:日期'
https://laravel.com/docs/5.3/validation#rule-after
“after”规则后面的字符串(本例中为start_date)不是数据库字段,而是传递给验证程序的输入字符串的一部分。
因此,按照您上面尝试的操作,验证器期望一个名为“created_at”的字段与您提交的其他输入一起传递,这可能不存在,因为您的意图是将其读取来自你的模型,这将导致它失败。
长话短说,你最后的陈述是正确的。 “之前/之后”规则不引用模型字段,而是引用传递给验证器的其他输入字段,或者可以由“strtotime”解释的日期字符串
答案 1 :(得分:1)
同意@Gordon,您可以尝试此操作,而无需在FormRequest中设置格式:
const FireflySubscription = ({children, stripePlanId}) => (
<FirebaseAuth>
{ ({isLoading, error, auth}) => {
if (error || isLoading || !auth) {
//it pushes these arguments to the parent function
return children({
error,
isLoading,
subscription: null,
})
}
if (stripePlanId) {
return <FirestoreCollection
path="subscriptions"
filter={[['createdBy', '==', auth.uid], ['stripePlanId','==', stripePlanId]]}
>
{ ({error, isLoading, data}) => {
return children({
error,
isLoading,
subscription: data.length > 0 ? data : null,
})
}}
</FirestoreCollection>
}
return <FirestoreCollection
path="subscriptions"
filter={['createdBy', '==', auth.uid]}
>
{ ({error, isLoading, data}) => {
return children({
error,
isLoading,
subscription: data.length > 0 ? data : null,
})
}}
</FirestoreCollection>
}}
</FirebaseAuth>
)
注意:之所以不能引用数据库值,是因为在此阶段没有定义的模型可以使用。
答案 2 :(得分:0)
这可以验证为:
'expected_at' => 'required|before:' . date('Y-m-d') . '|date_format:Y-m-d',
您甚至可以传递验证者日期参数并在验证时进行比较。我假设您正在搜索date_format验证器。