Vì có một vài ví dụ làm việc với cả PDO và PHQL, đây và tại đây phù hợp với ví dụ của bạn, có một cách tiếp cận nữa có thể thực hiện được trong cơ chế 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
Phương thức chỉ có thể truy cập được qua queryBuilder theo như tôi biết và nó hoạt động chính xác theo cách giống như các ví dụ PDO đã đề cập IN (?, ?, ?)
. Nhưng bạn không cần phải thực hiện nó bằng tay.
Bạn cũng có thể bỏ qua một phần của việc tạo PHQL và lái trực tiếp để tạo truy vấn SQL, nhưng với chi phí thực hiện các xác nhận riêng.
$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));