laravel request validation rules pass parameter

You can get the resolved binding from request

$product = $this->route('product');

Inside your rules method you can get the product instance with the above method.

public function rules()
{
    $product = $this->route('product');
    return [
        'name' => 'required|max:255|unique:products,name'.$product->id,
        'description' => 'required',
        'price' => 'required|numeric|max:500',
        'stock' => 'required|max:6',
        'discount' => 'required:max:2'
    ];
}

This is how I would validate unique product name on update. I pass the product ID as a route parameter, the use the unique validation rule to validate that it the product name does't exist in the Database except for this product (id).

class ProductController extends Controller {

    public function update(Request $request, $id) {
        $this->validate($request, [
            'name' => 'required|max:255|unique:products,name'.$id,
        ]);

        // ...
    }

}