С учетом двух таблиц: (входящий сильно уменьшенный / упрощенный пример, который демонстрирует ключевую проблему)
app_data представляет приложения, на которые можно подписаться
id app_name
1 apple
2 berry
3 cherry
app_sub сопоставляет адреса электронной почты с приложениями
id email
1 alex
2 bob
2 coby
Я хотел бы создать таблицу из однопользовательской точки зрения, показывающую, на какие приложения подписан текущий пользователь, а на какие нет.
Например, с точки зрения Алекса, я хотел бы получить:
требуемый_таблицы
id app_name is_subscribed
1 apple true
2 berry false
3 cherry false
Следующий запрос на чистом SQL, похоже, подходит:
select id, app_name, email
from app_data left join ( select *
from app_sub
where email='alex'
) as subquery
on app_name.id=app_data.id;
Однако я испытываю большие трудности с тем, чтобы заставить это работать в dbix-классе.
В качестве альтернативы я попытался удалить подзапрос следующим образом:
$app_data_resultset->search( { -or => [ { email => 'alex' },
{ email => undef },
],
},
{ select => [ qw{ me.id
me.app_name
app_sub.email
},
],
as => [ qw{ id
app_name
email
},
],
join => 'app_sub',
);
Тем не менее, это (теперь ожидаемо) приводит к следующему (после обработки как 0, так и нуля как ложного):
bad_table
id app_name is_subscribed
1 apple true
3 cherry false
Поскольку 'bob'и 'coby' подписаны на id 2, предложение where полностью исключаетВторой идентификатор.
Любая помощь будет принята с благодарностью!