Я отображаю столбец uid, abc и имя таблицы tx_abc_domain_model_abc...
... но теперь я хочу отображать только те записи, для которых НЕ был создан реальный путь.
Итак, я думаю, мне нужно НЕ ГДЕ ВНУТРЕННЕЕ СОЕДИНЕНИЕ (https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/Database/QueryBuilder/Index.html#join-innerjoin-rightjoin-and-leftjoin) для двух таблиц tx_abc_domain_model_abc и tx_realurl_uniqalias?
table: tx_abc_domain_model_abc
column: uid
table: tx_realurl_uniqalias
column: tablename = tx_abc_domain_model_abc
column: value_id
Контроллер действий:
...
$statement = $queryBuilder
->select('tx_abc_domain_model_abc.uid', 'tx_abc_domain_model_abc.abc', 'tx_abc_domain_model_abc.name')
->from('tx_abc_domain_model_abc')
->join(
'tx_abc_domain_model_abc',
'tx_realurl_uniqalias'
$queryBuilder->expr()->eq('tx_realurl_uniqalias.value_id', $queryBuilder->quoteIdentifier('tx_abc_domain_model_abc.uid'))
)
->where(
$queryBuilder->expr()->eq('tx_realurl_uniqalias.tablename', $queryBuilder->createNamedParameter('tx_abc_domain_model_abc')),
)
->execute();
...
Это верно? Но как НЕ ГДЕ?
a
без соответствующих строк вb
, мы могли бы написать что-то вроде этого:FROM a LEFT JOIN b ON b.a_id = a.id WHERE b.a_id IS NULL
. (обратите внимание, что a_id в совпадающей строке гарантированно не равен NULL при сравнении на равенство). Это также может быть выражено как предикат не существует, например.FROM a WHERE NOT EXISTS (SELECT 1 FROM b WHERE b.a_id = a.id)
- person spencer7593   schedule 21.11.2017NOT EXISTS (crsq)
. Я подозреваю, что typo3 похож на другие ORM в том, что в документации и примерах не признается, что операция антиобъединения, возможно, является чем-то, что мы могли бы захотеть сделать. (Мои SQL-конструкции были оставлены в комментарии, так как это был вопрос о typo3.) Мой вопрос будет примерно таким: как мне заставить typo3 выдавать и выполнять антиобъединение, подобное этому:SELECT a.foo FROM a LEFT JOIN b ON b.a_id = a.id WHERE b.a_id IS NULL
- person spencer7593   schedule 22.11.2017