Question

Je suis en train d'écrire un module personnalisé, et dans ce module, je dois ajouter une requête de recherche à la base de données si elle est pas déjà. Je me suis dit ce que je dois faire:

  1. Modèle Load catalogsearch/query
  2. Vérifiez si la requête existe, sinon ajoutez

Voici le code que je pensais que cela fonctionnerait:

$querymodel = Mage::getModel('catalogsearch/query');
$querymodel->loadByQueryText('testing 123');

if (!$querymodel->getId()) {
    $querymodel->setIsActive(1);
    $querymodel->setQueryText('testing 123');
    $querymodel->setStoreId(1);
    $querymodel->setIsProcessed(0);
    $querymodel->save();
}

Ce code est un succès en ce qu'elle ajoute à la table de catalogsearch_query. Cependant, la loadByQueryText() vérification initiale ou loadByQuery() ne retourne pas simplement vrai même quand une requête existe -. Donc je continue à obtenir la même requête ajoutée à la db

Je l'ai regardé à travers le fichier modèle (Catalogsearch/Model/Query.php) et j'utilise la méthode dans le même contexte exact que le modèle lui-même, donc je ne sais pas pourquoi cela ne fonctionne pas?

Toute aide appréciée!

Était-ce utile?

La solution 3

J'ai fini par le faire marcher d'une manière moins propre -. Aucune idée pourquoi la méthode loadByQueryText () est stuill ne fonctionne pas

$querymodel = Mage::getModel('catalogsearch/query')
    ->getCollection()
    ->addFieldToFilter('query_text', 'testing 123')
    ->getFirstItem();

renvoie un résultat donc je vais l'utiliser.

Autres conseils

Vous êtes en mesure de dire Magento avec le champ d'utiliser la charge. Le code suivant devrait vous permettre de dire CatalogSearch / requête pour charger par l'attribut QUERY_TEXT.

$querymodel = Mage::getModel('catalogsearch/query');
$querymodel->load('test 123','query_text');

Je l'ai fait ce qui suit afin de debug:

$querymodel = Mage::getModel('catalogsearch/query');
$querymodel->loadByQueryText('test');
$data = $querymodel->getData();
print_r($querymodel->getData());

Et si l'enregistrement existe, la sortie est:

Array
(
    [query_id] => 54120
    [query_text] => test
    [num_results] => 1
    [popularity] => 1
    [redirect] => 
    [synonym_for] => 
    [store_id] => 6
    [display_in_terms] => 1
    [is_active] => 1
    [is_processed] => 0
    [updated_at] => 2013-01-08 03:55:26
)

Dans votre code if (!$querymodel->getId()) { devrait être if (!$querymodel->getQueryId()) { ou de regarder la valeur retournée par $querymodel->getData()

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top