如何查看Magento中已有的记录?

时间:2012-01-13 17:26:30

标签: php zend-framework magento

我正在尝试执行一种SQL查询,我需要检查我的数据库表是否包含特定记录。如果是,则不做任何其他事情添加不存在的记录。

我的表格示例包含sample_id (auto-incremented), order_id, order_email_id, review_request, coupon_sent等字段。它有4条记录order_ids (71, 74, 126, 165)

要获得$ ids,我有这个查询,

$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);
  } 
}

我的$id包含(71, 74, 126, 165, 166, 167)

理想情况下,以下查询应检查现有记录(71, 74, 126, 165)并插入新记录(166, 167)。我回应了查询,它返回正确,但它仍然回应了'记录已存在'的ids 166和167,理想情况下它不应该

有没有其他方法可以检查Magento表中现有字段的值?

感谢任何帮助。提前致谢

3 个答案:

答案 0 :(得分:3)

可以使用collection filtering在几个步骤中完成。

$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);

最后一步为您提供了仍需要创建的ID。它们很容易使用,因为它们是一个数组。

foreach ($newIds as $id) {
    Mage::getModel('sample/sample')
        ->setOrderId($id)
        ->save();
}

答案 1 :(得分:1)

为了检查自定义表中是否存在值/条件,请尝试:

$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
}

只是一个概念 感谢

答案 2 :(得分:0)

连接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表达式。