在Laravel中验证与另一个模型相关的模型

在Laravel中验证与另一个模型相关的模型,laravel,laravel-4,laravel-validation,Laravel,Laravel 4,Laravel Validation,是否有可能使Laravel的验证规则像这样的伪代码 field1 in modelA must be lower than sum of field2, field3 and field4 from modelB 我不知道该怎么做…我不确定是否需要与具有特定ID的ModelB或任何ModelB条目的最低总和进行比较,因此下面是这两种情况的自定义验证规则 1.将ModelB与特定ID进行比较: 您可以添加任意多的字段进行求和(而不是像您的示例中那样仅添加3个字段)。验证程序代码如下所示: Val

是否有可能使Laravel的验证规则像这样的伪代码

field1 in modelA must be lower than sum of field2, field3 and field4 from modelB

我不知道该怎么做…

我不确定是否需要与具有特定ID的ModelB或任何ModelB条目的最低总和进行比较,因此下面是这两种情况的自定义验证规则

1.将ModelB与特定ID进行比较: 您可以添加任意多的字段进行求和(而不是像您的示例中那样仅添加3个字段)。验证程序代码如下所示:

Validator::make(
    array('field1' => 5),
    array('field1' => 'lower:ModelB,1,field2,field3,field4')
);
Validator::extend('lower', function ($attribute, $value, $parameters)
{
    // Get model name from first parameter
    $modelName = array_shift($parameters);
    // Get id from second parameter
    $id = array_shift($parameters);

    // Create a model instance
    $model = App::make($modelName)->find($id);

    // Calculate sum
    $sum = array_sum(array_map(function ($field) use ($model) {
        return $model->{$field};
    }, $parameters));

    // Return validation result
    return $value < $sum;
});
Validator::make(
    array('field1' => 5),
    array('field1' => 'lower:ModelB,field2,field3,field4')
);
Validator::extend('lower', function ($attribute, $value, $parameters)
{
    // Get model name from first parameter
    $modelName = array_shift($parameters);

    // Calculate sum
    $sum = App::make($modelName)->select(DB::raw('(' . implode('+', $parameters) . ') as sum'))->get()->min('sum');

    // Return validation result
    return $value < $sum;
});
验证规则如下所示:

Validator::make(
    array('field1' => 5),
    array('field1' => 'lower:ModelB,1,field2,field3,field4')
);
Validator::extend('lower', function ($attribute, $value, $parameters)
{
    // Get model name from first parameter
    $modelName = array_shift($parameters);
    // Get id from second parameter
    $id = array_shift($parameters);

    // Create a model instance
    $model = App::make($modelName)->find($id);

    // Calculate sum
    $sum = array_sum(array_map(function ($field) use ($model) {
        return $model->{$field};
    }, $parameters));

    // Return validation result
    return $value < $sum;
});
Validator::make(
    array('field1' => 5),
    array('field1' => 'lower:ModelB,field2,field3,field4')
);
Validator::extend('lower', function ($attribute, $value, $parameters)
{
    // Get model name from first parameter
    $modelName = array_shift($parameters);

    // Calculate sum
    $sum = App::make($modelName)->select(DB::raw('(' . implode('+', $parameters) . ') as sum'))->get()->min('sum');

    // Return validation result
    return $value < $sum;
});
与前面的规则相同,但没有ID作为第二个参数。验证程序代码如下所示:

Validator::make(
    array('field1' => 5),
    array('field1' => 'lower:ModelB,1,field2,field3,field4')
);
Validator::extend('lower', function ($attribute, $value, $parameters)
{
    // Get model name from first parameter
    $modelName = array_shift($parameters);
    // Get id from second parameter
    $id = array_shift($parameters);

    // Create a model instance
    $model = App::make($modelName)->find($id);

    // Calculate sum
    $sum = array_sum(array_map(function ($field) use ($model) {
        return $model->{$field};
    }, $parameters));

    // Return validation result
    return $value < $sum;
});
Validator::make(
    array('field1' => 5),
    array('field1' => 'lower:ModelB,field2,field3,field4')
);
Validator::extend('lower', function ($attribute, $value, $parameters)
{
    // Get model name from first parameter
    $modelName = array_shift($parameters);

    // Calculate sum
    $sum = App::make($modelName)->select(DB::raw('(' . implode('+', $parameters) . ') as sum'))->get()->min('sum');

    // Return validation result
    return $value < $sum;
});
验证规则如下所示:

Validator::make(
    array('field1' => 5),
    array('field1' => 'lower:ModelB,1,field2,field3,field4')
);
Validator::extend('lower', function ($attribute, $value, $parameters)
{
    // Get model name from first parameter
    $modelName = array_shift($parameters);
    // Get id from second parameter
    $id = array_shift($parameters);

    // Create a model instance
    $model = App::make($modelName)->find($id);

    // Calculate sum
    $sum = array_sum(array_map(function ($field) use ($model) {
        return $model->{$field};
    }, $parameters));

    // Return validation result
    return $value < $sum;
});
Validator::make(
    array('field1' => 5),
    array('field1' => 'lower:ModelB,field2,field3,field4')
);
Validator::extend('lower', function ($attribute, $value, $parameters)
{
    // Get model name from first parameter
    $modelName = array_shift($parameters);

    // Calculate sum
    $sum = App::make($modelName)->select(DB::raw('(' . implode('+', $parameters) . ') as sum'))->get()->min('sum');

    // Return validation result
    return $value < $sum;
});
Validator::extend('lower',function($attribute,$value,$parameters)
{
//从第一个参数获取模型名称
$modelName=array\u shift($parameters);
//求和
$sum=App::make($modelName)->选择(DB::raw(‘(‘(‘.内爆(‘+’,$parameters)。’)作为sum’)->get()->min(‘sum’);
//返回验证结果
返回$value<$sum;
});

这也可以使用表名和
DB
而不是模型来完成。

我猜值是
field1
是传递给验证器的值。不清楚的是,您是否希望该值低于ModelB表中任何条目的总和,或者仅低于具有特定ID的ModelB类型的条目。