/
Collection.php
executable file
·57 lines (52 loc) · 2.21 KB
/
Collection.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
namespace Fastgento\Storelocator\Model\ResourceModel\Location;
/**
* Class Collection
*
* @package Fastgento\Storelocator\Model\Location
*/
class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
{
/**
* @param \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory
* @param \Psr\Log\LoggerInterface $logger
* @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
* @param \Magento\Framework\Event\ManagerInterface $eventManager
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
* @param \Magento\Framework\DB\Adapter\AdapterInterface|null $connection
* @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb|null $resource
*/
public function __construct(
\Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory,
\Psr\Log\LoggerInterface $logger,
\Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
\Magento\Framework\Event\ManagerInterface $eventManager,
\Magento\Store\Model\StoreManagerInterface $storeManager,
\Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
\Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
) {
parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
$this->storeManager = $storeManager;
}
protected function _construct()
{
$this->_init('Fastgento\Storelocator\Model\Location', 'Fastgento\Storelocator\Model\ResourceModel\Location');
}
/**
* Retrieve nearest locations
*
* @param $centerLat
* @param $centerLng
* @param $distance
* @return $this
*/
public function getNearestLocations($centerLat, $centerLng, $distance)
{
$exprHaversine = "6371*acos(cos(radians($centerLat))*cos(radians(lat))*cos(radians(lng) - radians($centerLng)) + sin(radians($centerLat))*sin(radians(lat)))";
$this->getSelect()
->columns(['distance' => new \Zend_Db_Expr($exprHaversine)])
->having("distance < ?", $distance)
->order("distance");
return $this;
}
}