Hi,
I have read a few tutorials and howtos but have not gotten this to
work. I have also looked at the base classes to get an idea on best
practice etc.

I have installed the sfDoctrineGuardPlugin and created a Profile
model, that relates to sfGuardUser. In my admin generated list, I want
to be able to filter the list based on fields in the Profile (namely:
first_name and last_name).

For this I have added some code to the /lib/filter/Doctrine/
sfDoctrineGuardPlugin/sfGuardUserFormFilter.class.php

class sfGuardUserFormFilter extends PluginsfGuardUserFormFilter
{
  public function configure()
  {
    parent::configure();

    $this->widgetSchema['first_name'] = new
sfWidgetFormFilterInput(array('with_empty' => false));
    $this->widgetSchema['last_name']  = new
sfWidgetFormFilterInput(array('with_empty' => false));

    $this->validatorSchema['first_name'] = new
sfValidatorPass(array('required' => false));
    $this->validatorSchema['last_name']  = new
sfValidatorPass(array('required' => false));
  }

  protected function addFirstNameColumnQuery(Doctrine_Query $query,
$field, $values)
  {
    if (!is_array($values))
    {
      $values = array($values);
    }

    if (!count($values))
    {
      return;
    }
    $query->leftJoin('r.Profile p')
          ->andWhereIn('p.first_name = ?', $values);
  }

  protected function addLastNameColumnQuery(Doctrine_Query $query,
$field, $values)
  {
    if (!is_array($values))
    {
      $values = array($values);
    }

    if (!count($values))
    {
      return;
    }
    $query->leftJoin('r.Profile pf')
          ->addWhere('pf.last_name = ?', $values);
  }
}

I have also turned on these filters in the generator.yml and they are
displayed. When I filter for any of these values, I get this error:
 "Invalid parameter number: number of bound variables does not match
number of tokens"

which comes from the SELECT ignoring the filter values. This is the
resulting SELECT:

at Doctrine_Connection->execute('SELECT COUNT(*) AS num_results FROM
(SELECT s.id FROM sf_guard_user s LEFT JOIN profiles p ON s.id =
p.sf_guard_user_id LEFT JOIN profiles p2 ON s.id = p2.sf_guard_user_id
WHERE p.first_name = ? IN (?) AND p2.last_name = ? GROUP BY s.id)
dctrn_count_query', array('text' => ''))

This was for a filter where first_name = "Tom" and last_name did not
have anything to filter for. Theoretically, the query should not
include last_name at all. I have checked the $values and they are
correct.

Any ideas how to find out what is going wrong?

juro

-- 
If you want to report a vulnerability issue on symfony, please send it to 
security at symfony-project.com

You received this message because you are subscribed to the Google
Groups "symfony users" group.
To post to this group, send email to symfony-users@googlegroups.com
To unsubscribe from this group, send email to
symfony-users+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/symfony-users?hl=en

Reply via email to