Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

Archive

Our old forums are still available as a read-only archive.

Moderators: martimiz, Sean, biapar, Willr, Ingo, simon_w

Ambiguous fields in ComplexTableField


Reply

1454 Views

Avatar
iculshaw

3 October 2008 at 1:11am Community Member, 13 Posts

Hi there,

I have extended the ComplexTableField to administer ecommerce orders, however on joining the Member table (in the join parameter for ComplexTableField) and trying to filter the results a nice ajax error is returned.

What i am trying to do is show the Order ID, Customer Surname, Order Status, Created Order Date and Last Updated Order Date.

Ajax error below:

Could not filter results: ERROR:Error 256: DATABASE ERROR: Couldn't run query: SELECT `Order`.*, `Order`.ID, if(`Order`.ClassName,`Order`.ClassName,'Order') AS RecordClassName, Surname, Status, Created FROM `Order` LEFT JOIN `Member` ON `Order`.`MemberID` = `Member`.`ID` WHERE (`Member`.`Surname` LIKE '%culs%') GROUP BY `Order`.ID | Column 'Created' in field list is ambiguous At l431

The code i'm actually using here is (ComplexTableField Extension):

function __construct($controller, $name, $sourceClass, $mode, $fieldList, $detailFormFields = null, $sourceFilter = "", $sourceSort = "Created DESC", $sourceJoin = "") {
      $this->mode = $mode;
      
      parent::__construct($controller, $name, $sourceClass, $fieldList, $detailFormFields, $sourceFilter, $sourceSort, $sourceJoin);
      
      $this->Markable = true;
      $this->setPageSize(15);
      
      // search
      $search = isset($_REQUEST['TransactionSearch']) ? Convert::raw2sql($_REQUEST['TransactionSearch']) : null;
      
      if(!empty($_REQUEST['TransactionSearch'])) {
         $this->sourceFilter[] = "`Member`.`Surname` LIKE '%$search%'";
      }
      
      Requirements::javascript('ecommerce/javascript/TransactionTableField.js');
      
   }

and the actual calling function

$tableFields = array(
         "ID" => _t('TransactionAdmin.ORDERNO', 'Order Number'),
         "Surname" => _t('TransactionAdmin.SURNAME', 'Surname'),
         "Status" =>    _t('TransactionAdmin.STATUS', 'Status'),
         "Created" => _t('TransactionAdmin.CREATED', 'Created')
      );   
      
      // Options for drop down field
      
      $options['Unpaid'] = 'Unpaid';
      $options['Paid'] = 'Paid';
      $options['Query'] = 'Query';
      $options['Processing'] = 'Processing';
      $options['Sent'] = 'Sent';
      $options['Complete'] = 'Complete';
      $options['MemberCancelled'] = 'MemberCancelled';
      $options['AdminCancelled'] = 'AdminCancelled';
      
      $popupFields = new FieldSet(
         new DropdownField("Status", _t('TransactionAdmin.STATUS', 'Status'),$options),
         new CheckboxField("Printed", _t('TransactionAdmin.PRINTED', 'Mark as Printed'))
      );
      
      $idField = new HiddenField('ID', '', $section);
      $table = new TransactionTableField($this, "Order", "Order", $section, $tableFields, $popupFields, ((isset($filter))?array($filter):array()), null, "LEFT JOIN `Member` ON `Order`.`MemberID` = `Member`.`ID`"); //array($filter)
      $table->setParentClass(false);
      
      $fields = new FieldSet(
         new TabSet(   'Root',
            new Tab(_t('TransactionAdmin.ORDERS', 'Orders'),
               new LiteralField("Title", $title),
               $idField,
               $table
            )
         )
      );

btw i know the TransactionTableField() function caller is a bit dailywtf :)

Thanks in advance