$query = new CRM_Core_DAO(); $query->entityTable = 'civicrm_contact'; $query->selectAdd(); $query->selectAdd('id'); $query->selectAdd('display_name'); $query->whereAdd('is_deleted = 0'); $query->orderBy('display_name'); $query->find(); while ($query->fetch()) { echo "Contact ID: " . $query->id . "\n"; echo "Display Name: " . $query->display_name . "\n"; }
$date = date('Y-m-d', strtotime('-1 year')); $query = new CRM_Core_DAO(); $query->entityTable = 'civicrm_contact'; $query->selectAdd(); $query->selectAdd('id'); $query->selectAdd('display_name'); $query->joinAdd(); $query->joinAdd('INNER JOIN civicrm_contribution ON civicrm_contact.id = civicrm_contribution.contact_id'); $query->whereAdd("civicrm_contribution.receive_date >= '{$date}'"); $query->whereAdd('civicrm_contribution.is_test = 0'); $query->whereAdd('is_deleted = 0'); $query->groupBy('civicrm_contact.id'); $query->orderBy('display_name'); $query->find(); while ($query->fetch()) { echo "Contact ID: " . $query->id . "\n"; echo "Display Name: " . $query->display_name . "\n"; }This code is similar to the previous example, but it adds a JOIN clause to the query and filters on a specific date range. The query also includes a GROUP BY clause to ensure that each contact is listed only once, even if they have made multiple donations.