Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Query.php
Go to the documentation of this file.
1 <?php
8 
12 use Magento\Search\Model\Query as QueryModel;
13 
20 class Query extends AbstractDb
21 {
27  protected $_date;
28 
32  protected $dateTime;
33 
40  public function __construct(
41  \Magento\Framework\Model\ResourceModel\Db\Context $context,
42  \Magento\Framework\Stdlib\DateTime\DateTime $date,
43  \Magento\Framework\Stdlib\DateTime $dateTime,
44  $connectionName = null
45  ) {
46  $this->_date = $date;
47  $this->dateTime = $dateTime;
48  parent::__construct($context, $connectionName);
49  }
50 
58  public function loadByQueryText(AbstractModel $object, $value)
59  {
60  $select = $this->getConnection()->select()->from(
61  $this->getMainTable()
62  )->where(
63  'query_text = ?',
64  $value
65  )->where(
66  'store_id = ?',
67  $object->getStoreId()
68  )->limit(
69  1
70  );
71  $data = $this->getConnection()->fetchRow($select);
72  if ($data) {
73  $object->setData($data);
74  $this->_afterLoad($object);
75  }
76  return $this;
77  }
78 
88  public function load(AbstractModel $object, $value, $field = null)
89  {
90  if (is_numeric($value)) {
91  return parent::load($object, $value);
92  } else {
93  $this->loadByQueryText($object, $value);
94  }
95  return $this;
96  }
97 
106  public function loadByQuery(AbstractModel $object, $value)
107  {
108  $this->loadByQueryText($object, $value);
109  return $this;
110  }
111 
116  public function _beforeSave(AbstractModel $object)
117  {
118  $object->setUpdatedAt($this->dateTime->formatDate($this->_date->gmtTimestamp()));
119  return $this;
120  }
121 
127  protected function _construct()
128  {
129  $this->_init('search_query', 'query_id');
130  }
131 
140  public function saveIncrementalPopularity(QueryModel $query)
141  {
142  $adapter = $this->getConnection();
143  $table = $this->getMainTable();
144  $saveData = [
145  'store_id' => $query->getStoreId(),
146  'query_text' => $query->getQueryText(),
147  'popularity' => 1,
148  ];
149  $updateData = [
150  'popularity' => new \Zend_Db_Expr('`popularity` + 1'),
151  ];
152  $adapter->insertOnDuplicate($table, $saveData, $updateData);
153  }
154 
163  public function saveNumResults(QueryModel $query)
164  {
165  $adapter = $this->getConnection();
166  $table = $this->getMainTable();
167  $numResults = $query->getNumResults();
168  $saveData = [
169  'store_id' => $query->getStoreId(),
170  'query_text' => $query->getQueryText(),
171  'num_results' => $numResults,
172  ];
173  $updateData = ['num_results' => $numResults];
174  $adapter->insertOnDuplicate($table, $saveData, $updateData);
175  }
176 }
saveIncrementalPopularity(QueryModel $query)
Definition: Query.php:140
$adapter
Definition: webapi_user.php:16
load(AbstractModel $object, $value, $field=null)
Definition: Query.php:88
$value
Definition: gender.phtml:16
__construct(\Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Framework\Stdlib\DateTime\DateTime $date, \Magento\Framework\Stdlib\DateTime $dateTime, $connectionName=null)
Definition: Query.php:40
_beforeSave(AbstractModel $object)
Definition: Query.php:116
loadByQueryText(AbstractModel $object, $value)
Definition: Query.php:58
$table
Definition: trigger.php:14
_afterLoad(\Magento\Framework\Model\AbstractModel $object)
Definition: AbstractDb.php:641
loadByQuery(AbstractModel $object, $value)
Definition: Query.php:106