Inheritance: extends Number
Example #1
0
    /**
     * @group       RelationFilter
     * @group       RelationFilterGetFieldName
     * @covers      FOF30\Model\DataModel\Filter\Relation::getFieldName
     */
    public function testGetFieldName()
    {
        $subquery = \JFactory::getDbo()->getQuery(true);
        $subquery->select('*')->from('test');
        $filter = new Relation(\JFactory::getDbo(), 'foo', $subquery);
        $result = $filter->getFieldName();
        $check = '(
SELECT *
FROM test)';
        $this->assertEquals($check, $result, 'Relation::getFieldName Returned the wrong result');
    }
Example #2
0
 /**
  * This event runs after we have built the query used to fetch a record list in a model. It is used to apply
  * automatic query filters based on model relations.
  *
  * @param   DataModel  &$model  The model which calls this event
  * @param   \JDatabaseQuery      &$query  The query we are manipulating
  *
  * @return  void
  */
 public function onAfterBuildQuery(&$model, &$query)
 {
     $relationFilters = $model->getRelationFilters();
     foreach ($relationFilters as $filterState) {
         $relationName = $filterState['relation'];
         $tableAlias = $model->getBehaviorParam('tableAlias', null);
         $subQuery = $model->getRelations()->getCountSubquery($relationName, $tableAlias);
         // Callback method needs different handling
         if (isset($filterState['method']) && $filterState['method'] == 'callback') {
             call_user_func_array($filterState['value'], array(&$subQuery));
             $filterState['method'] = 'search';
             $filterState['operator'] = '>=';
             $filterState['value'] = '1';
         }
         $options = new JRegistry($filterState);
         $filter = new DataModel\Filter\Relation($model->getDbo(), $relationName, $subQuery);
         $methods = $filter->getSearchMethods();
         $method = $options->get('method', $filter->getDefaultSearchMethod());
         if (!in_array($method, $methods)) {
             $method = 'exact';
         }
         switch ($method) {
             case 'between':
             case 'outside':
                 $sql = $filter->{$method}($options->get('from', null), $options->get('to'));
                 break;
             case 'interval':
                 $sql = $filter->{$method}($options->get('value', null), $options->get('interval'));
                 break;
             case 'search':
                 $sql = $filter->{$method}($options->get('value', null), $options->get('operator', '='));
                 break;
             default:
                 $sql = $filter->{$method}($options->get('value', null));
                 break;
         }
         if ($sql) {
             $query->where($sql);
         }
     }
 }