У меня есть 2 таблицы User с полем company_id и другими страндартными полями, а так же талица Company, в которой есть id, name, active.
Мне нужно авторизировать пользователя только если у его компании active=1.
manyTomany это не "усложение" приложения, а отражение реального мира где учредители могут иметь компании, а компании иметь сотрудников.
Если компании имеют много юзеров, а юзеры много компаний то manyToMany связь с промежуточной таблицей.
Во всех таблицах не нужно использовать id т.к. сущности связываются по цепочке, в этом и смысл.
SELECT * FROM `t` WHERE `t`.`parent_id` = 0 AND `t`.`id` NOT IN (
SELECT `t`.`parent_id` FROM `t` WHERE `t`.`id` in (
SELECT MAX(`t`.`id`) FROM `t` WHERE `t`.`parent_id` in (
SELECT `t`.`id` FROM `t` WHERE `t`.`parent_id` = 0)
GROUP BY `t`.`parent_id`
)
)
UNION
SELECT * FROM `t` WHERE `t`.`id` in (
SELECT MAX(`t`.`id`) FROM `t` WHERE `t`.`parent_id` in (
SELECT `t`.`id` FROM `t` WHERE `t`.`parent_id` = 0)
GROUP BY `t`.`parent_id`
)
UPD : Сейчас делаю так. первым шагом сохраняю запись из модели-1 и только потом даю возможность работать с моделью-2. Каждое изменение в модели-2 сразу сохраняется в базе.