4

I have table in which i'm trying to store email addresses. These email addresses will be save with user_id.

For example in email_list table

|ID | user_id | email          |
...............................
| 1 | 101     | john@gmail.com |
...............................
| 2 | 102     | john@gmail.com |

In above table you can see same email addresses save with different user_id, that's it what i'm trying to do.

Currently i'm trying simple laravel validation like this.

'email' => 'required|unique:email_list|email',

So is there any way to check already exist email addresses if row has same user_id? I'm using laravel 5.2. I would like to appreciate if someone guide me. Thank you

Edited After 3 Hours

I also add same question in the github as issue. A person is saying that i have to create own validation rule.

Ayaz Ali Shah
  • 3,453
  • 9
  • 36
  • 68

2 Answers2

3

Forcing A Unique Rule To Ignore A Given ID

You can specify an ID to be ignored as the optional third parameter. Furthermore, if your table uses a primary key column name other than id, you may specify it as the optional fourth parameter

'email' => "unique:{$table},{$field},{$user->id},{$idField}"

So in your case, it'd be as follows

'email' => "unique:email_list,email,{$user->id},user_id'
Ben Swinburne
  • 25,669
  • 10
  • 69
  • 108
  • In third parameter i will have to user id right? like 102 ? – Ayaz Ali Shah Sep 20 '16 at 10:55
  • Its returning an error `QueryException in Connection.php line 729: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'assa@exy.com' for key 'email_list_email_unique' (SQL: insert into email_list (email, u_id, updated_at, created_at) values (assa@exy.com, 102, 2016-09-20 10:59:11, 2016-09-20 10:59:11)` – Ayaz Ali Shah Sep 20 '16 at 11:00
  • If you ignore the ID, it'll always validate and insert. What you meant when you replied to @alaric you meant the second condition. In which case, 5.2 doesn't support it out of the box. What you want is validate the form if the email address is there, but doesn't belong to this user. If it exists, and belongs to the user, the form should not validate. You need to extend the validator- I'll update my answer for you. – Ben Swinburne Sep 20 '16 at 11:12
  • I want to prevent to insert if same email address exist with same user id, like in table which i add in question the first and second record should not add again. But if user id is `103` then it should be add in table like `| 3 | 103| john@gmail.com`. Thanks for having attention. – Ayaz Ali Shah Sep 20 '16 at 11:18
  • I added some text in the question can you kindly view it. Appreciated... – Ayaz Ali Shah Sep 20 '16 at 13:38
0

It is against of exist rule.
First of all, the exist rule check based on the condition the fields is avail or not.
I think, if we used it as opposite then it is useful for you.

Ex:-

     'email' => 'exists:email_list,email,user_id,!102'

i.e.,

     'email' => 'exists:email_list,email,user_id,!'. $user_id        

otherwise,

     'email' => 'exists:email_list,email,user_id,!'. Input::get(user_id)

while using Input & import the

    use Illuminate\Support\Facades\Input;        

and change message content
Please try these and reply what happened.. or is it work for you..?

Rama Durai
  • 740
  • 6
  • 17