चूंकि पीडीओ और पीएचक्यूएल दोनों के साथ काम करने वाले कुछ उदाहरण हैं यहांए> और यहां यह आपके उदाहरण के अनुकूल है, फाल्कन क्वेरीबिल्डर तंत्र में एक और दृष्टिकोण संभव है:
$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
जहां तक मुझे पता है, विधि केवल queryBuilder के माध्यम से उपलब्ध है और यह ठीक उसी तरह से काम करती है जैसे उल्लेखित PDO उदाहरण IN (?, ?, ?)
. लेकिन आपको इसे हाथ से लागू करने की आवश्यकता नहीं है।
आप PHQL बनाने के भाग को छोड़ भी सकते हैं और SQL क्वेरी बनाने के लिए सीधे ड्राइव कर सकते हैं, लेकिन स्वयं सत्यापन करने की लागत पर।
$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));