Laravel 4:多列的独特验证

nee*_*raj 8 validation unique multiple-columns laravel-4

我知道这个问题早先被问过,但我没有得到相关答案.

我想知道如何编写规则来检查两列的唯一性.我试过写一个像这样的规则:

public $rules = array(
    "event_id"=>"required",
    "label"=>"required|unique:tblSection,label,event_id,$this->event_id",
    "description"=>"required"
);
Run Code Online (Sandbox Code Playgroud)

在我的示例中,我需要进行验证,以便一个标签对于单个事件id可以是唯一的,但也可以用于其他事件id.例如,我希望实现:

id   event_id    label   description
1     1          demo    testing
2     2          demo    testing
Run Code Online (Sandbox Code Playgroud)

在上面定义的规则中,我需要以某种方式传递当前选定的event_id,以便它可以检查选定的event_id的数据库表中是否存在标签,但是我收到的语法错误如下:

{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"syntax error, unexpected '\"'","file":"\/var\/www\/tamvote\/app\/modules\/sections\/models\/Sections.php","line":39}}
Run Code Online (Sandbox Code Playgroud)

注意:我不想使用任何软件包,只需检查laravel 4是否足以允许编写此类规则.

Ioa*_*zan 8

Mohamed Bouallegue的答案是正确的.

在您的控制器的商店方法你这样做:

Model::$rules['label'] = 'required|unique:table_name,label,NULL,event_id,event_id,' .$data['event_id'];
Run Code Online (Sandbox Code Playgroud)

其中$ data是你的POST数据.

对于更新方法,您可以:

$model = Model::find($id);
Model::$rules['label'] = 'required|unique:table_name,label,NULL,event_id,event_id,'.$data['event_id'].',id,id'.$model->id;
Run Code Online (Sandbox Code Playgroud)

其中$ data是您的PUT/PATCH数据,$ model是您正在编辑的记录,id是表主键.


Moh*_*gue 2

我之前没有尝试过,但我认为如果您在验证之前获得 event_Id 那么您可以这样做:

'label' => 'unique:table_name,label,NULL,event_id,event_id,'.$eventId
//you should get the $eventId first
Run Code Online (Sandbox Code Playgroud)