123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Directory\Model\ResourceModel;
- /**
- * Region Resource Model
- *
- * @api
- * @since 100.0.2
- */
- class Region extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
- {
- /**
- * Table with localized region names
- *
- * @var string
- */
- protected $_regionNameTable;
- /**
- * @var \Magento\Framework\Locale\ResolverInterface
- */
- protected $_localeResolver;
- /**
- * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
- * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
- * @param string $connectionName
- */
- public function __construct(
- \Magento\Framework\Model\ResourceModel\Db\Context $context,
- \Magento\Framework\Locale\ResolverInterface $localeResolver,
- $connectionName = null
- ) {
- parent::__construct($context, $connectionName);
- $this->_localeResolver = $localeResolver;
- }
- /**
- * Define main and locale region name tables
- *
- * @return void
- */
- protected function _construct()
- {
- $this->_init('directory_country_region', 'region_id');
- $this->_regionNameTable = $this->getTable('directory_country_region_name');
- }
- /**
- * Retrieve select object for load object data
- *
- * @param string $field
- * @param mixed $value
- * @param \Magento\Framework\Model\AbstractModel $object
- * @return \Magento\Framework\DB\Select
- */
- protected function _getLoadSelect($field, $value, $object)
- {
- $select = parent::_getLoadSelect($field, $value, $object);
- $connection = $this->getConnection();
- $locale = $this->_localeResolver->getLocale();
- $systemLocale = \Magento\Framework\AppInterface::DISTRO_LOCALE_CODE;
- $regionField = $connection->quoteIdentifier($this->getMainTable() . '.' . $this->getIdFieldName());
- $condition = $connection->quoteInto('lrn.locale = ?', $locale);
- $select->joinLeft(
- ['lrn' => $this->_regionNameTable],
- "{$regionField} = lrn.region_id AND {$condition}",
- []
- );
- if ($locale != $systemLocale) {
- $nameExpr = $connection->getCheckSql('lrn.region_id is null', 'srn.name', 'lrn.name');
- $condition = $connection->quoteInto('srn.locale = ?', $systemLocale);
- $select->joinLeft(
- ['srn' => $this->_regionNameTable],
- "{$regionField} = srn.region_id AND {$condition}",
- ['name' => $nameExpr]
- );
- } else {
- $select->columns(['name'], 'lrn');
- }
- return $select;
- }
- /**
- * Load object by country id and code or default name
- *
- * @param \Magento\Framework\Model\AbstractModel $object
- * @param int $countryId
- * @param string $value
- * @param string $field
- * @return $this
- */
- protected function _loadByCountry($object, $countryId, $value, $field)
- {
- $connection = $this->getConnection();
- $locale = $this->_localeResolver->getLocale();
- $joinCondition = $connection->quoteInto('rname.region_id = region.region_id AND rname.locale = ?', $locale);
- $select = $connection->select()->from(
- ['region' => $this->getMainTable()]
- )->joinLeft(
- ['rname' => $this->_regionNameTable],
- $joinCondition,
- ['name']
- )->where(
- 'region.country_id = ?',
- $countryId
- )->where(
- "region.{$field} = ?",
- $value
- );
- $data = $connection->fetchRow($select);
- if ($data) {
- $object->setData($data);
- }
- $this->_afterLoad($object);
- return $this;
- }
- /**
- * Loads region by region code and country id
- *
- * @param \Magento\Directory\Model\Region $region
- * @param string $regionCode
- * @param string $countryId
- *
- * @return $this
- */
- public function loadByCode(\Magento\Directory\Model\Region $region, $regionCode, $countryId)
- {
- return $this->_loadByCountry($region, $countryId, (string)$regionCode, 'code');
- }
- /**
- * Load data by country id and default region name
- *
- * @param \Magento\Directory\Model\Region $region
- * @param string $regionName
- * @param string $countryId
- * @return $this
- */
- public function loadByName(\Magento\Directory\Model\Region $region, $regionName, $countryId)
- {
- return $this->_loadByCountry($region, $countryId, (string)$regionName, 'default_name');
- }
- }
|