Pergunta

Eu estou querendo saber o que significa "inc" significa?No meu caso em particular todos os reescreve têm definido inc=1.

mysql> describe enterprise_url_rewrite;
+----------------+----------------------+------+-----+---------+----------------+
| Field          | Type                 | Null | Key | Default | Extra          |
+----------------+----------------------+------+-----+---------+----------------+
| url_rewrite_id | int(10) unsigned     | NO   | PRI | NULL    | auto_increment |
| request_path   | varchar(255)         | NO   | MUL | NULL    |                |
| target_path    | varchar(255)         | NO   |     | NULL    |                |
| is_system      | smallint(5) unsigned | NO   |     | NULL    |                |
| guid           | varchar(32)          | NO   |     | NULL    |                |
| identifier     | varchar(255)         | NO   | MUL | NULL    |                |
| inc            | int(10) unsigned     | NO   |     | 1       |                |
| value_id       | int(10) unsigned     | NO   | MUL | NULL    |                |
| store_id       | smallint(5) unsigned | NO   |     | NULL    |                |
| entity_type    | smallint(5) unsigned | NO   |     | NULL    |                |
+----------------+----------------------+------+-----+---------+----------------+
10 rows in set (0.00 sec)

Obrigado!

Foi útil?

Solução

O seguinte todos se concentra em urls de produtos armazenados nesta tabela, porém o mesmo se aplica às categorias.Este é simplesmente como produtos é o que eu estava a depuração, e para a fácil exemplos.

Existem apenas dois lugares que eu posso encontrar esse valor utilizado

1.Incrementando o contador

Enterprise_UrlRewrite_Model_Index_Action_Url_Rewrite_RefreshAbstract::_refreshUrlRewrite

Nesse método há uma consulta para atualizar a reescrita de url, ele tem um pouco de código PHP, como:

$insert .= sprintf(' ON DUPLICATE KEY UPDATE %1$s = %1$s + 1',
$this->_getTable('enterprise_urlrewrite/url_rewrite') . '.inc');

Isso ajuda a gerar uma diversão realmente olhando consulta como

INSERT INTO `enterprise_url_rewrite` (`request_path`, `target_path`, 
`guid`, `is_system`, `identifier`, `value_id`, `store_id`, 
`entity_type`) SELECT `uk`.`value` AS `request_path`, 
CONCAT('catalog/product/view/id/', uk.entity_id) AS `target_path`, 
'66af826f9f0df53191c06afe93c03159' AS `guid`, 1 AS `is_system`, 
`uk`.`value` AS `identifier`, `uk`.`value_id`, `uk`.`store_id`, 3 AS
`entity_type` FROM `catalog_product_entity_url_key` AS `uk` WHERE 
(uk.entity_id IN ('19472')) ON DUPLICATE KEY UPDATE 
enterprise_url_rewrite.inc = enterprise_url_rewrite.inc + 1

A primeira coisa a notar é certo no final, isso vai incrementar o contador se há qualquer restrição de integridade erros.

No caso de produtos que vão para esta consulta, significa que após esta consulta você vai estar faltando a entrada correspondente no enterprise_catalog_product_rewrite.Você pode verificar quais os produtos que estão em falta pesquisando select entity_id, sku from catalog_product_entity where entity_id not in(select product_id from enterprise_catalog_product_rewrite);.

Este vai ser, porque o caminho de pedido já existe enterprise_url_rewrite para um determinado tipo de entidade/store, você deve ver o inc incremento de número de cada vez que esta consulta é executada se houver uma violação de restrição para essa entidade.

Esta lógica está na classe abstrata, e este método não é substituído, em qualquer um de seus filhos métodos que significa que ele é consistente para

  • Changelog (Mview / Atualização em Agendar)
  • Linha (Atualização em salvar)
  • Atualização (completo reindex)

Isso significa que todos os reindexes os urls que têm a mesma lógica de fallback de "se erro, incremento do contador".

2.Usando o valor de incremento

Ambas as seguintes chamada parent::_getUrlRewriteSelectSql

  • Enterprise_UrlRewrite_Model_Index_Action_Url_Rewrite_Redirect_Refresh_Row::_getUrlRewriteSelectSql
  • Enterprise_UrlRewrite_Model_Index_Action_Url_Rewrite_Redirect_Refresh_Changelog::_getUrlRewriteSelectSql

Que é definido como Enterprise_UrlRewrite_Model_Index_Action_Url_Rewrite_Redirect_Refresh::_getUrlRewriteSelectSql

É o único lugar que eu posso ver que utiliza o .inc valor no banco de dados.

Estas, basicamente, uma chamada insertFromSelect instrução, e parece realmente deformado como:

SELECT CONCAT(r.identifier, CASE  WHEN ur.inc IS NULL OR `m`.`value` = 1 THEN '' 
ELSE CONCAT('-', ur.inc) END) AS `request_path`, `r`.`target_path`,
'65912c647bc5f65fc0f59df5f6477d05' AS `guid`, 0 AS `is_system`, 
CONCAT(r.identifier, CASE  WHEN ur.inc IS NULL OR `m`.`value` = 1 
THEN '' ELSE CONCAT('-', ur.inc) END) AS `identifier`, 
`r`.`redirect_id` AS `value_id`, `r`.`store_id`, 1 AS `entity_type`
FROM `enterprise_url_rewrite_redirect` AS `r` LEFT JOIN
enterprise_url_rewrite` AS `ur` ON ur.identifier = r.identifier
AND ur.store_id = r.store_id AND ur.entity_type = 1 LEFT JOIN 
`enterprise_index_multiplier` AS `m` ON ur.identifier IS NOT NULL

A chave que eu vejo éCASE WHEN ur.inc IS NULL ORm.valor= 1 THEN '' ELSE CONCAT('-', ur.inc) END).Se o incremento for null, então não aplicar qualquer valor de incremento, caso contrário, concatená-lo para o final da URL.Esta consulta é alimentado na lógica do passo 1, onde ele tenta _refreshUrlRewrite mas, potencialmente, com um incremento de número no final.

Tudo junto, eu acho que esta lógica está no local para controlar o número para aplicar para o final do url quando um duplicado for encontrado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top