Is there is a way of referencing another field when specifying the exists validation rule in Laravel? I want to be able to say that input a must exist in table a, input b must exist in table b AND the value for column x in table b must equal input a.
Best explained by example:
public $rules = array(
'game_id' => 'required|exists:games,id',
'team1_id' => 'required|exists:teams,id,game_id,<game_id input value here>',
'team2_id' => 'required|exists:teams,id,game_id,<game_id input value here>'
);
So with my validation rules I want to be able to make sure that:
game_id
exists within thegames
table (id
field)team1_id
exists within theteams
table (id
field) and thegame_id
column (in theteams
table) must equal the value of thegame_id
input.- As above for
team2_id
So, if in my form, I entered 1
for game_id
, I want to be able to ensure that the record within the teams table for both team1_id
and team2_id
have the value 1
for game_id
.
I hope this makes sense.
Thanks
EDIT: Supposedly this does not work in Laravel 5.5. @user3151197 answer might do the trick.
I'm using Laravel 5.4 and it has the ability to add a custom Rule to the exists and unique rules. I think this came into existence some time in 5.3
Here is my scenario: I have an email verifications table and I want to ensure that a passed machine code and activation code exist on the same row.
Be sure to include
use Illuminate\Validation\Rule;
The first arguement in the exists method is the table and the second is the custom column name I'm using for the 'mc' field. I pass the second column I want to check using the 'use' keyword and then use that field in a a where clause.
This is pretty handy, because now I no longer need a custom Validation rule.
You want a custom validation rule, and I would create a separate class for this. But for brevity here's pretty much the same using inline closure:
Then use simply this:
As your rules are model property you need to make some change for them before running validator.
You could change your rules to:
and now you will need to use loop to insert correct value instead of
{$game_id}
string.I can show you how I did it in my case for editing rule:
You can do the same in your case changing
{$game_id}
into$data['game_id']
(in my case I changed{,id}
into,$editId
EDIT
Of course If you didn't have
$rules
set as property you could simply do:in place where you have your data set.
try this its works for me