user11124425
user11124425

Reputation: 971

Duplicate on 2 fields

I looking a way to avoid the duplicates in Laravel. For example, I have a table with 2 fields which are name and firstname.

How to manage the duplicates on the Controller? I am newbie...

enter image description here

Here is my function store().

public function store(Request $request)
    {
        $request->validate([
                'name' => 'required|string|max:25',
                'firstname' => 'required|string|max:25'

        ]);

        $exists = Auteur::where('name', $request->get('name'))->where('firstName', $request->get('firstName'))->count();

        if (!$exists){
            Auteur::create($request->all());
            return redirect()->route('auteurs.index')
                    ->with('success', 'save');
        }


    }

I thank you for your help and your explanations.

Upvotes: 0

Views: 413

Answers (2)

Watercayman
Watercayman

Reputation: 8178

If it were one field, you could use validation, or make that field unique and that would take care of it with a little error handling. However, with two fields to have to check against, it might be easiest to check if the element is already in the database and deduplicate from there. So in the store() method:

$exists = Auteur::where('name', $req->get('name'))->where('firstname', $req->get('firstname')->count();

if (!$exists){
    // create the new model, now that we know there is no duplicate in the database
    Auteur::create($request->all());
}

Upvotes: 1

Vikash Pathak
Vikash Pathak

Reputation: 3562

Just add unique in your validation rule. If you would like to check unique validation each field separately.

$request->validate([
                'name' => 'required|unique:auteurs,name|string|max:25',
                'firstname' => 'required|unique:auteurs,firstname|string|max:25'

        ]);

Here I hope the table name is `auteurs`

Upvotes: 0

Related Questions