Как проверить уже существующую запись в Magento? - PullRequest
1 голос
/ 13 января 2012

Я пытаюсь выполнить SQL-запрос, когда мне нужно проверить, содержит ли моя таблица базы данных определенную запись или нет.Если это так, ничего не делайте, добавьте запись, которой нет.

Пример моей таблицы содержит поля типа sample_id (auto-incremented), order_id, order_email_id, review_request, coupon_sent.У него есть 4 записи, имеющие order_ids (71, 74, 126, 165)

Чтобы получить идентификаторы $, у меня есть этот запрос,

$to_date = date('Y-m-d H:i:s',strtotime('-3 days'));
$orders = Mage::getModel('sales/order')->getCollection()->addFieldToFilter('status', 'complete')->addFieldToFilter('updated_at',array('to' => $to_date ))->addAttributeToSelect('customer_email')->addAttributeToSelect('entity_id');
foreach($orders as $order)
{
  $email = $order->getCustomerEmail();
  $id = $order->getEntityId();
  $sample = Mage::getModel('sample/sample')->getCollection()->addFieldToFilter('order_id', $id)->addFieldToSelect('order_id');
  if($sample != null)
  {echo "Record already exists";}
  else
  { 
     echo "Insert this record";
     $sample->setOrderId($id);
  } 
}

My $id содержит (71, 74, 126, 165, 166, 167)

Так что в идеалеПриведенный ниже запрос должен проверять существующие записи (71, 74, 126, 165) и вставлять новые (166, 167).Я повторил запрос, и он вернулся правильно, но он все еще повторяет «Запись уже существует» для идентификаторов 166 и 167, что в идеале не должно

Есть ли другой способ проверить значение существующего поля в таблицев Magento?

Любая помощь приветствуется.Заранее спасибо

Ответы [ 3 ]

3 голосов
/ 13 января 2012

Это можно сделать за несколько шагов, используя фильтрацию коллекции .

$wantedIds = $orders->getAllIds();
$sample = Mage::getModel('sample/sample')->getCollection()
    ->addFieldToFilter('order_id', array('in' => $wantedIds)
    ->addFieldToSelect('order_id');
$presentIds = $sample->getColumnValues('order_id');
$newIds = array_diff($wantedIds, $presentIds);

Последний шаг дает вам идентификаторы, которые все еще должны быть созданы. Их легко использовать, поскольку они являются массивом.

foreach ($newIds as $id) {
    Mage::getModel('sample/sample')
        ->setOrderId($id)
        ->save();
}
1 голос
/ 16 января 2012

Чтобы проверить, существует ли значение / условие в пользовательской таблице, попробуйте:

$collection = Mage::getModel('custom-module/entity-model')->getCollection()->addFieldToFilter('field-to-check', $value_to_check)->getFirstItem();
if($collection->getId()){
    //such condition/value exists
}else{
   //such condition/value doesn't exist
}

Просто концепция.
Спасибо

0 голосов
/ 13 января 2012

Подключите базу данных magento:

$conn = Mage::getSingleton('core/resource')->getConnection('core_read'); 

// perform sql queries
$result = $conn->fetchAll("SELECT * FROM sample;");
foreach($result as $rows) {
   echo $rows['order_ids'] . "\n";
}

Таким образом, вы можете использовать простое выражение SQL таким способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...