Laravel 5 Validation唯一传递变量占位符

Cha*_*ynn 5 php validation laravel laravel-5

是否有可能将唯一的验证方法传递给where变量的子句?

下面是一个例子:

在我的模型中,我有我的验证规则.

public static $rules = array(
    'amount'    => 'required|numeric',
    'user_id'   => 'required|exists:users,id',
    'cause_id'  => 'required|exists:causes,id',
    'circle_id' => 'required|unique:donations,circle_id,NULL,id,cause_id,:cause_id',
);
Run Code Online (Sandbox Code Playgroud)

然后在我的控制器中运行:

$input = array(
    'amount'    => Input::get('amount'),
    'user_id'   => $this->currentUser->id,
    'cause_id'  => $cause->id,
    'circle_id' => Input::get('circle_id')
);

$validator = Validator::make($input, Donation::$rules);
Run Code Online (Sandbox Code Playgroud)

如何在不连接验证规则的情况下获取cause_id?正如您在rules数组中看到的那样,我尝试了PDO样式:占位符,但查询执行如下: select count(*) as aggregate from donations where circle_id = '500' and cause_id = ':cause_id'

Jon*_*hon 4

对于您的情况,我的建议是将您的规则包装在一个函数中:

public static function rules($causeId)
{
    return array(
        'amount'    => 'required|numeric',
        'user_id'   => 'required|exists:users,id',
        'cause_id'  => 'required|exists:causes,id',
        'circle_id' => 'required|unique:donations,circle_id,NULL,id,cause_id,' . $causeId,
    );
}
Run Code Online (Sandbox Code Playgroud)

然后调用您的函数,传入您的值:

$validator = Validator::make($input, Donation::rules($yourCauseId));
Run Code Online (Sandbox Code Playgroud)

我过去遇到过这样的问题,我也想在另一个字段的规则中使用其他字段的值。这往往是解决这个问题的最简单方法。