В таком случае вам по ссылке в ответе.
В этой отдельной таблице вам никто не мешает точно так же использовать foreign, так что вы правильно поняли, что он только для одного значения, но это не значит, что он вам совсем не пригодится.
Вы как будто не хотите, чтобы вам помогали. Я лично устал уже пытаться заставить вас сформулировать задачу не в виде непонятной лапши из непонятного кода.
какие таблицы у вас есть, как они выглядят, как связаны друг с другом и что вы хотите с ними сделать
Ваши эти левые таблицы вообще хоть как-то с таблицами этого пакета-то связаны?
Я вас просил на чистом SQL описать, что вы хотите, вы показали UNION. Теперь пакет этот откуда-то вылез. Ладно, на SQL вы не можете, но хотя бы словами-то своими вы способны описать чётко какие таблицы у вас есть, как они выглядят, как связаны друг с другом и что вы хотите с ними сделать?
Ну, вроде, очевидно - к треду привязана сущность participant, к которой в свою очередь уже привязан user. И для фильтрации по пользователям нужно приджойнить participant.
Только при чём тут тогда UNION?
Откуда мне знать, зачем незнакомый мне человек что-то делает в незнакомой мне кодовой базе незнакомого мне проекта?
Я могу только ответить, что UNION и JOIN работают принципиально по-разному.
Роман Валеев, вот эти синие иконки, по которым открывается форма создания, будут у вас кнопками-ссылками и вы по клику будете менять URL. Это будет единственная обязанность этих кнопок. Единственной обязанностью конкретного интерфейса добавления будет добавление. А единственной обязанностью вашего самописного роутера будет рендерить нужную страницу в ответ на изменение URL. Таким образом ваше приложение будет проще создавать и дорабатывать. Но это потребует погружения и экспериментов с тем, что я описываю. Но поскольку почти весь современный сложный фронтенд работает примерно так, это время не будет потрачено зря :)
Что касается событий - прочитайте любую статью Getting Started with History API, там будет подробно описано :)
Егор П, когда в глобальной переменной хранятся данные - это нормально для начала. Когда в глобальной переменной хранится состояние роутинга - это не очень.
Роман Валеев, списки у вас всё равно где-то хранятся. Самое простое, с чего вы начнёте - это глобальная переменная в памяти. Вот оттуда берите их и рендерите, когда при помощи стандартных событий определяете, что URL страницы изменился.
Имхо, проще сразу пытаться завязаться на History API и рендерить в соответствии с изменением URL. Примитивный роутер сделать не очень сложно, а пользы он принесёт намного больше, чем жонглирование глобалами.