Karena ada beberapa contoh yang bekerja dengan PDO dan PHQL di sini dan di sini yang sesuai dengan contoh Anda, ada satu pendekatan lagi yang mungkin dilakukan dalam mekanisme queryBuilder Phalcon:
$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
metode ini hanya dapat dijangkau melalui queryBuilder sejauh yang saya tahu dan cara kerjanya persis sama seperti contoh PDO yang disebutkan IN (?, ?, ?)
. Tetapi Anda tidak perlu menerapkannya secara manual.
Anda juga dapat melewatkan bagian dari pembuatan PHQL dan mengarahkan langsung untuk membuat kueri SQL, tetapi dengan biaya membuat validasi sendiri.
$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));