ChronoConnectivity v5 and ChronoForms v5 use a different syntax for building WHERE statements. This FAQ gives some examples of the forms that can be used to build more complex statements.
Note: these examples will work for ChronoForms v5 or ChronoConnectivity v5
In each case the code to create a WHERE clause goes into the 'Conditions' box on the listing Models tab.
To use '='
<?php
return array('model_id.column' => 'value');
?>
To use != (or similar expressions)
<?php return array( 'model_id.column !=' => 'value' ); ?>
To use AND
Just add more than one entry to the array and they will all be required
<?php return array( 'model_id.column' => 'value', 'model_id.column_2' => 'value_2' ); ?>
To use OR
Add an array of values
<?php
return array( 'model_id.column' => array('some value', 'another value', . . . ) );
?>
To use LIKE
<?php return array( 'model_id.column LIKE' => '%value%' ); ?>
Or, with a PHP variable
<?php return array( 'model_id.column LIKE' => '%'.$variable.'%' ); ?>
Getting values in CC/CFv5
ChronoForms v5 stores any values it has in the $form->data array and you can access the values using $form->data['variable_name']. Similarly ChronoConnectivity v5 stores any values it has from the page URL in the $this->data array and you can access the values using $this->data['variable_name'].
So for example if you want to use the gcb variable passed back by CC to CFv5 you might have a WHERE clause like this
<?php
return array('model_id.column' => $form->data['gcb']);
?>
Or, if you are using a Model Id that saves data in a sub-array the WHERE code might look like this:
<?php
return array('model_id.column' => $form->data['model_id']['var_name'];
?>
You can adapt any of the other examples here similarly.
Getting the current user's records
If you have a column in the database table with the user's id in it then you can get just their records
<?php
$user = \JFactory::getUser();
return array('model_id.user_id' => $user->id);
?>
This can be combined with other conditions as shown above.
A complex query
You can add more complex WHERE string by prefixing it with a colon :
<?php
return array (":model.column = 'value' OR model.column_2 = 'value_2'");
?>
or
<?php
// where $var is an integer
$var = JRequest::getVar('param','', 'get');
return array (":test.id > {$var}");
?>
But note that you must quote any string values before using them:
<?php
// where $var is an string
$var = JRequest::getVar('param','', 'get');
$dbo = \GCore\Models\MODEL_ID::getInstance()->dbo;
$var = $dbo->quote($var);
return array (":test.id > {$var}");
?>
A conditional query . . .
You can use any PHP in the Conditions box to check form values and set different conditions as you need them
<?php
if ( empty($form->data['input_name']) ) {
return array('model_id.column' => 'value');
} else {
return array (":test.id > { $form->data['input_name']}");}
?>

Comments: