_date = $date; $this->dateTime = $dateTime; parent::__construct($context, $connectionName); } /** * Custom load model only by query text (skip synonym for) * * @param AbstractModel $object * @param string $value * @return $this */ public function loadByQueryText(AbstractModel $object, $value) { $select = $this->getConnection()->select()->from( $this->getMainTable() )->where( 'query_text = ?', $value )->where( 'store_id = ?', $object->getStoreId() )->limit( 1 ); $data = $this->getConnection()->fetchRow($select); if ($data) { $object->setData($data); $this->_afterLoad($object); } return $this; } /** * Loading string as a value or regular numeric * * @param AbstractModel $object * @param int|string $value * @param null|string $field * @return $this|\Magento\Framework\Model\ResourceModel\Db\AbstractDb * @SuppressWarnings("unused") */ public function load(AbstractModel $object, $value, $field = null) { if (is_numeric($value)) { return parent::load($object, $value); } else { $this->loadByQueryText($object, $value); } return $this; } /** * Custom load model by search query string * * @param AbstractModel $object * @param string $value * @return $this * @deprecated 100.1.0 "synonym for" feature has been removed */ public function loadByQuery(AbstractModel $object, $value) { $this->loadByQueryText($object, $value); return $this; } /** * @param AbstractModel $object * @return $this */ public function _beforeSave(AbstractModel $object) { $object->setUpdatedAt($this->dateTime->formatDate($this->_date->gmtTimestamp())); return $this; } /** * Init resource data * * @return void */ protected function _construct() { $this->_init('search_query', 'query_id'); } /** * Save query with incremental popularity * * @param QueryModel $query * @return void * * @throws \Magento\Framework\Exception\LocalizedException */ public function saveIncrementalPopularity(QueryModel $query) { $adapter = $this->getConnection(); $table = $this->getMainTable(); $saveData = [ 'store_id' => $query->getStoreId(), 'query_text' => $query->getQueryText(), 'popularity' => 1, ]; $updateData = [ 'popularity' => new \Zend_Db_Expr('`popularity` + 1'), ]; $adapter->insertOnDuplicate($table, $saveData, $updateData); } /** * Save query with number of results * * @param QueryModel $query * @return void * * @throws \Magento\Framework\Exception\LocalizedException */ public function saveNumResults(QueryModel $query) { $adapter = $this->getConnection(); $table = $this->getMainTable(); $numResults = $query->getNumResults(); $saveData = [ 'store_id' => $query->getStoreId(), 'query_text' => $query->getQueryText(), 'num_results' => $numResults, ]; $updateData = ['num_results' => $numResults]; $adapter->insertOnDuplicate($table, $saveData, $updateData); } }