skip to Main Content

I have two column ‘book_name’ & ‘writer’ in ‘books’ table. When new data insert i want to check the same book and writer not will be added. But i dont understand how to do this. here is my code.

public function rules()
{
    return [
        'book_name' => 'required|unique:books,book_name,' . $this->id,
        'writer' => 'required|unique:books,writer,' . $this->id,
    ];
}

2

Answers


  1. Chosen as BEST ANSWER
    public function rules()
    {
        return [
            'book_name' => [
                'required',
                Rule::unique('books')->where(fn ($query) => $query->where('writer', request('writer')))
                    ->ignore($this->id)
            ],
    
            'writer' => 'required',
        ];
    }
    

  2. According to laravel documentation, unique rule is applied by defining the rule, stating the table and column name e.g.

    unique:table,column
    

    alternativelly if you’re using eloquent models it can be

    unique:pathtomodel,column
    

    The . $this->id constructor should not be needed.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search