Ponieważ istnieje kilka przykładów pracy z PDO i PHQL tutaj i tutaj które pasuje do twojego przykładu, istnieje jeszcze jedno możliwe podejście w mechanizmie Phalcon queryBuilder:
$builder = $this->modelsManager->createBuilder();
$builder->addFrom('Application\Entities\KeywordsTrafficReal', 'tr')
->leftJoin('Application\Entities\Keywords', 'kw.id = tr.keyword_id', 'kw')
->inWhere('keyword_id', self::$keywords) // <<< it is an array!
->betweenWhere('traffic_date', self::$daterange['from'], self::$daterange['to']);
inWhere
metoda jest osiągalna tylko przez queryBuilder o ile wiem i działa dokładnie tak samo jak wspomniane przykłady PDO IN (?, ?, ?)
. Ale nie musisz wdrażać go ręcznie.
Możesz także pominąć część tworzenia PHQL i przejść bezpośrednio do tworzenia zapytania SQL, ale kosztem tworzenia własnych walidacji.
$realModel = new KeywordsTrafficReal();
$sql = sprintf('SELECT * '
. 'FROM keywords_traffic_real tr '
. 'LEFT JOIN keywords kw '
. 'ON kw.id = tr.keyword_id '
. 'WHERE tr.keyword_id IN(%s) '
. "AND traffic_date BETWEEN '%s' AND '%s' ",
join(',', self::$keywords), self::$daterange['from'], self::$daterange['to']);
$results = new \Phalcon\Mvc\Model\Resultset\Simple(null, $realModel, $realModel->getReadConnection()->query($sql));