Гостевое промежуточное ПО Laravel

Изменить: это не работает должным образом. В отличие от принятого ответа, это приводит к уникальным нарушениям ключа, когда два процесса неоднократно называют upsert_foo одновременно.

Eureka! Я понял способ сделать это в одном запросе: используйте UPDATE ... RETURNING, чтобы проверить, были ли затронуты какие-либо строки:

CREATE TABLE foo (k INT PRIMARY KEY, v TEXT);

CREATE FUNCTION update_foo(k INT, v TEXT)
RETURNS SETOF INT AS $$
    UPDATE foo SET v = $2 WHERE k = $1 RETURNING $1
$$ LANGUAGE sql;

CREATE FUNCTION upsert_foo(k INT, v TEXT)
RETURNS VOID AS $$
    INSERT INTO foo
        SELECT $1, $2
        WHERE NOT EXISTS (SELECT update_foo($1, $2))
$$ LANGUAGE sql;

UPDATE необходимо выполнить в отдельной процедуре, потому что, к сожалению, это синтаксическая ошибка:

... WHERE NOT EXISTS (UPDATE ...)

Теперь она работает по желанию:

SELECT upsert_foo(1, 'hi');
SELECT upsert_foo(1, 'bye');
SELECT upsert_foo(3, 'hi');
SELECT upsert_foo(3, 'bye');
0
задан Ragas 25 March 2019 в 08:46
поделиться

1 ответ

В вашем методе просто проверьте, если пользователь вошел в систему, если затем прервать до 404, как показано ниже ...

if(\Illuminate\Support\Facades\Auth::check()) {
    return abort(404);
}

#Rest of the code is for guest user.....
#
0
ответ дан Atiqur 25 March 2019 в 08:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: