我正在开发自定义Magento扩展程序。
以下是我如何接纳客户群中的所有客户:
class DbMasterActor extends Actor with ActorLogging {
private var originalSender: ActorRef = _
//TODO: Need to add routing to the config to limit instances
val summaryActor = context.actorOf(Props(new SummaryActor), "summaryactor")
def receive = {
case msg: DbMessage => {
this.originalSender = sender
msg.query match {
case "summary" => {
getDbResults().onComplete{
case Success(result) => originalSender ! result
case Failure(ex) => log.error(ex.getMessage)
}
}
}
}
//If not match log an error
case _ => log.error("Received unknown message: {} ")
}
def getDbResults(): Future[SummaryResponse] = {
log.debug("hitting db results")
val mongoResult = Future{ Thread.sleep(500); "Mongo"}
val redisResult = Future{ Thread.sleep(800); "redis"}
for{
mResult <- mongoResult
rResult <- redisResult
} yield SummaryResponse(mResult, rResult)
}
}
这是我如何获取有关特定客户群中用户的信息。
如何让所有用户付款或完成(例如)订单?
答案 0 :(得分:0)
这是90%的方式:
<?php
require_once '<path_to_magento_root>/app/Mage.php';
Mage::app('default');
$customers = Mage::getResourceModel('reports/customer_collection')
->setPage(0,10)
//->addAttributeToFilter('orders_count', array('gt' => 0))
->addOrdersStatistics();
foreach ($customers as $c) {
echo $c->getId().' - '.$c->getEmail().': '.$c->getOrdersCount()." orders, average amount ".$c->getOrdersAvgAmount().", sum amount ".$c->getOrdersSumAmount().PHP_EOL;
}
缺少的10%是列出所有客户及其订单信息,而不是仅包含至少一个订单的订单(包括正在进行的订单 - addOrdersStatistics()
包含任何非订单取消)。
我在那里注释了一行,//->addAttributeToFilter('orders_count', array('gt' => 0))
,因为我想应该这样做,但它似乎什么都不做。尽管如此,我认为我至少应该放弃这一点,因为它可能至少是朝着正确方向迈出的一步。
当然,您也可以遍历每个订单,并构建符合您标准的客户数组,但这可能比使用像这样的Magento报表模型要慢得多。但作为最后的手段,它确实有效。所以就这样直接查询数据库。
答案 1 :(得分:0)
尝试以下解决方案,这应该适合您。
$customers = Mage::getModel('customer/customer')
->getCollection()
->addAttributeToSelect('*');
$customers->joinTable(
array('sales/order'),
'customer_email=email',
array('*'),
null,
'right'
);
// print_r($customers->getData());
$data = $customers->getData();
foreach($data as $d)
{
//print_r($d); // print this to see the available fields
echo $d[customer_email]; //get the desired information
echo "<br>";
}