У меня есть триггер.
CREATE OR REPLACE FUNCTION asset_constraint() RETURNS trigger AS $$
DECLARE
max_assets INTEGER := 2;
assets_count INTEGER := 0;
must_check BOOLEAN := false;
BEGIN
IF TG_OP = 'INSERT' THEN
must_check := true;
END IF;
IF TG_OP = 'UPDATE' THEN
IF (NEW.name != OLD.name) THEN
must_check := true;
END IF;
END IF;
IF must_check THEN
-- prevent concurrent inserts from multiple transactions
LOCK TABLE assets IN EXCLUSIVE MODE;
SELECT INTO assets_count COUNT(*)
FROM assets;
--WHERE name = NEW.name;
IF assets_count >= max_assets THEN
RAISE EXCEPTION 'no puede añadir mas de % assets.', max_assets;
END IF;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER asset_constraint
BEFORE INSERT OR UPDATE ON assets
FOR EACH ROW EXECUTE PROCEDURE asset_constraint();
Триггер работает правильно, если он насчитывает более 2 записей, то он отправляет исключение.
Теперь я не знаю, сможем ли мы сделать это напрямую с помощью валидатора в laravel, без триггера. Мне нужно использовать функциональность javascript «toast» для сообщения, а не исключение, как показано на оранжевой картинке.
Уведомления пользователей работают очень хорошо, когда я делаю CRUD, я использую ajax, запросы и тосты.
Если возникает исключение, настройте сообщение, например, в файле запроса ... и покажите его как сообщение "toast" справа.
Я действительно не знаю, как это сделать, если выйти из триггера и создать валидатор, который его перехватывает, или создает собственный валидатор без триггера.