Používám extbase v mém prodloužení, a tak jsem *Repository
třídy, kde můžu dělat jednoduché dotazy jako:
public function getRecordsByCondition($config = [],$recordPages = null) {
$recordQuery = $this->createQuery();
$constraints = [];
if ($config['field1']) {
$constraints[] = $recordQuery->equals('field1',$config['field1']));
}
if ($config['field2']) {
$constraints[] = $recordQuery->equals('field2',$config['field2']));
}
if ($config['field3']) {
$constraints[] = $recordQuery->equals('field3',$config['field3']));
}
if (count($constraints)) {
if ($recordPages) {
$constraints[] = $recordQuery->in('pid',$recordPages);
$recordQuery->getQuerySettings()->setRespectStoragePage(false);
}
$recordQuery->matching($recordQuery->logicalAnd($constraints));
} else {
return false;
}
return $recordQuery->execute();
}
to bude respektovat enableFields
a další obvyklé podmínky.
na druhou stranu je zde možnost udělat to tímto způsobem:
public function getrecords2($config,$recordPages) {
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
->getQueryBuilderForTable('tx_myext_domain_model_records');
$rawquery = $queryBuilder
->select('*')
->from('tx_myext_domain_model_records')
->where(
$queryBuilder->expr()->eq('field1',$config['field1']),
$queryBuilder->expr()->eq('field2',$config['field2']),
$queryBuilder->expr()->eq('field3',$config['field3']),
$queryBuilder->expr()->in('pid', $recordPages),
$queryBuilder->expr()->eq('deleted',0),
$queryBuilder->expr()->eq('hidden',0)
// starttime, endtime, language, workspace, ....
);
return $rawquery->execute()->fetchAll();
}
kde musím péče o enablefields
sám ale mít více možností, jak upřesnit dotaz.
Na první pohled můžete vidět, že existují i jiné metody (eq
vs equals
) a tyhle dělat dotazy nemají žádný vztah. Ale oba pracují na stejném stole.
Teď jsem v místě, kde potřebuji změnit všechny své práce od první k druhé variantě, jak jsem třeba dotaz s join
k jinému stolu, které nemůže být provedeno s první varianta (pokud vím).
Uniklo mi něco, nebo se první varianta potřebuje nějaké vylepšení?
field_to_relation_table.field_in_relation
. ne nutně zavolat metodu připojit.