FOF30\Model\DataModel\Behaviour\Own::onAfterBuildQuery PHP Метод

onAfterBuildQuery() публичный Метод

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.
public onAfterBuildQuery ( &$model, &$query ) : void
Результат void
    public function onAfterBuildQuery(&$model, &$query)
    {
        // Make sure the field actually exists
        if (!$model->hasField('created_by')) {
            return;
        }
        // Get the current user's id
        $user_id = $model->getContainer()->platform->getUser()->id;
        // And filter the query output by the user id
        $db = $model->getContainer()->platform->getDbo();
        $query->where($db->qn($model->getFieldAlias('created_by')) . ' = ' . $db->q($user_id));
    }

Usage Example

Пример #1
0
 /**
  * @group           Behaviour
  * @group           OwnOnAfterBuildQuery
  * @covers          FOF30\Model\DataModel\Behaviour\Own::onAfterBuildQuery
  * @dataProvider    OwnDataprovider::getTestOnAfterBuildQuery
  */
 public function testOnAfterBuildQuery($test, $check)
 {
     $msg = 'Own::onAfterBuildQuery %s - Case: ' . $check['case'];
     $config = array('idFieldName' => $test['tableid'], 'tableName' => $test['table']);
     $platform = static::$container->platform;
     $platform::$user = (object) array('id' => 99);
     $model = new DataModelStub(static::$container, $config);
     $query = \JFactory::getDbo()->getQuery(true)->select('*')->from('test');
     $dispatcher = $model->getBehavioursDispatcher();
     $filter = new Own($dispatcher);
     $filter->onAfterBuildQuery($model, $query);
     $rawQuery = (string) $query;
     if ($check['contains']) {
         $this->assertNotFalse(stripos($rawQuery, $check['query']), sprintf($msg, 'Query should contain the query clause'));
     } else {
         $this->assertFalse(stripos($rawQuery, $check['query']), sprintf($msg, 'Query should not contain the query clause'));
     }
 }