Laravel 4: Unique Validation for Multiple Columns

neeraj picture neeraj · Jun 18, 2014 · Viewed 8.8k times · Source

I know this question has been asked earlier but i did not get relevant answer.

I want to know that how can i write a rule to check uniqueness of two columns. I have tried to write a rule like:

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

In my example i need to put validation so that one label could be unique for a single event id but may be used for other event id as well. For Example i want to achieve:

id   event_id    label   description
1     1          demo    testing
2     2          demo    testing

In the rule defined above, somehow i need to pass current selected event_id so that it could check whether the label does not exist in the database table for selected event_id but i am getting syntax error like:

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

Note: I don't want to use any package but simply checking if laravel 4 capable enough to allow to write such rules.

Answer

Ioana Cucuruzan picture Ioana Cucuruzan · Aug 16, 2014

The answer from Mohamed Bouallegue is correct.

In your controller for the store method you do:

Model::$rules['label'] = 'required|unique:table_name,label,NULL,event_id,event_id,' .$data['event_id'];

where $data is your POST data.

And for the update method you do:

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

where $data is your PUT/PATCH data, $model is the record you are editing and id is the table primary key.