0

As magento storing data in multiple tables is quiet difficult to get all the data required using pure SQL. Found some examples but none actually getting details I need about the order. What I would like to get based on order number is all information about payment and payment status, total amount but no products or quantities using only SQL. How to do it ? Or is it possible to use Magento then display whole query in SQL ?

I tried this:

 $torders = Mage::getModel('sales/order')
 ->getCollection()
 ->addAttributeToSelect('*')
 ->addAttributeToSort('increment_id', 'DESC')
 ->addAttributeToFilter('main_table.created_at', array('from' => $from,'to' => $now))
 ->addAttributeToFilter('status', 'processing')
 ->join(array('payment' => 'sales/order_payment'),'main_table.entity_id=payment.parent_id',array('payment_method' =>'payment.method'))
 //->addAttributeToSort('increment_id', 'DESC')
 ->addAttributeToFilter('main_table.created_at', array('from' => $from,'to' => $now))
 ;

------ I commented out some lines because if enabled getting 500 error ------

 echo $torders->getSelect()->__toString(); <--- this 

gives me a nice SQL query but how to add all the details about payment method ? how to JOIN payment details into "collection" and filter by selected payment method (ex: paypal) ?

I think I got it, don't know yet why it won't work with array " $torders = Mage::getModel('sales/order') ->getCollection() ->addAttributeToSelect('*') ->addAttributeToSort('increment_id', 'DESC') ->addAttributeToFilter('main_table.created_at', array('from' => $from,'to' => $now)) //->addAttributeToFilter('status', array('nin' => array('canceled'))"

because i need all the orders except cancelled but ... eventually I can use a conditions in a foreach loop later.

Final version (working):

$torders = Mage::getModel('sales/order')
 ->getCollection()
 ->addAttributeToSelect('*')
 ->addAttributeToSort('increment_id', 'DESC')
 ->addAttributeToFilter('main_table.created_at', array('from' => 
 $from,'to' => $now))
 ->addFieldToFilter('payment.method', array('eq' => 
 'customercredit'))
 ->addFieldToFilter('state', 'processing')
 //->addAttributeToFilter('status', array('nin' => array('canceled'))
 ->join(array('payment' => 'sales/order_payment'), 
 'main_table.entity_id=payment.parent_id', array('payment_method' 
 =>'payment.method'))
 ->addAttributeToSort('increment_id', 'DESC')
 ->addAttributeToFilter('main_table.created_at', array('from' => 
 $from,'to' => $now))
 ;
asked Jan 9, 2018 at 9:00

1 Answer 1

0

you can apply this code

 $torders = Mage::getModel('sales/order')->getCollection()
 ->addAttributeToSelect('*')
 ->load();
 foreach ($torders as $order) 
 {
 echo $order;
 }
Kushal Dani
2,1542 gold badges19 silver badges53 bronze badges
answered Jan 9, 2018 at 9:10
2
  • No no no, what I meant is i would like to add payment details into the query before "foreach loop". I'm doing it now like this, so I can get payment details but not while the collection is created. Commented Jan 9, 2018 at 9:13
  • Maybe my question wasn't precise so I updated it a bit. Commented Jan 9, 2018 at 9:16

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.