Thank you very much, that was exactly what I needed.

I modified (generalized) the method a little (inspired by methods in
sfFormFilterDoctrine):

        public function addTkstateColumnQuery($query, $field, $value)
        {
                $fieldName = $this->getFieldName($field);

                if (!empty($value))
                {
                        $query->andWhereIn(sprintf('%s.%s', 
$query->getRootAlias(),
$fieldName), $value);
                }
        }

On 19 led, 20:15, Tom Ptacnik <[email protected]> wrote:
> Thank you very much, I'll try.
>
> On 15 led, 14:47, ken <[email protected]> wrote:
>
>
>
> > You need to add a custom query method in your filter class.
>
> >   public function addTkskateColumnQuery($query, $field, $value)
> >   {
> >         if (!empty($value))
> >     {
> >       $query->addWhereIn('p. tkstate', $value);
> >     }
> >   }
>
> > On Jan 15, 5:50 pm, Tom Ptacnik <[email protected]> wrote:
>
> > > Nobody filter a list by checkboxes or by a multiple selectbox?
>
> > > On 11 led, 20:51, Tom Ptacnik <[email protected]> wrote:
>
> > > > Hello,
>
> > > > I have classic admin generated backend (Symfony 1.4). Today I've tried
> > > > to customize the filter for the list view.
>
> > > > The problem is that I want to filter by multiple select. So I've
> > > > changed default widgets in configure method in my TicketFormFilter
> > > > class from:
>
> > > > 'tkstate'    => new sfWidgetFormChoice(array('choices' => array('' =>
> > > > '', 'new' => 'new', 'waitingforuser' => 'waitingforuser',
> > > > 'waitingforadmin' => 'waitingforadmin', 'closed' => 'closed',
> > > > 'deleted' => 'deleted'))),
>
> > > > 'tkstate'    => new sfValidatorChoice(array('required' => false,
> > > > 'choices' => array('new' => 'new', 'waitingforuser' =>
> > > > 'waitingforuser', 'waitingforadmin' => 'waitingforadmin', 'closed' =>
> > > > 'closed', 'deleted' => 'deleted'))),
>
> > > > to
>
> > > > $this->widgetSchema['tkstate'] = new sfWidgetFormChoice(array
> > > > ('choices' => array('' => '', 'new' => 'new', 'waitingforuser' =>
> > > > 'waitingforuser', 'waitingforadmin' => 'waitingforadmin', 'closed' =>
> > > > 'closed', 'deleted' => 'deleted'), 'multiple' => true));
>
> > > >         $this->validatorSchema['tkstate'] = new sfValidatorChoice(array
> > > > ('required' => false, 'choices' => array('new' => 'new',
> > > > 'waitingforuser' => 'waitingforuser', 'waitingforadmin' =>
> > > > 'waitingforadmin', 'closed' => 'closed', 'deleted' => 'deleted'),
> > > > 'multiple' => true));
>
> > > > ... only added the multiple parameter.
>
> > > > But when i click on the "filter" submit (with two selected items: new,
> > > > waitingforuser), I got this error:
>
> > > > stack trace
> > > > at ()
> > > > in SF_ROOT_DIR\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib
> > > > \vendor\doctrine\Doctrine\Connection.php line 1082 ...
> > > >             $message .= sprintf('. Failing Query: "%s"', $query);
> > > >         }
> > > >         $exc  = new $name($message, (int) $e->getCode());
>
> > > >         if ( ! isset($e->errorInfo) || ! is_array($e->errorInfo)) {
> > > >             $e->errorInfo = array(null, null, null, null);
> > > >         }
> > > > at Doctrine_Connection->rethrowException(object('PDOException'), object
> > > > ('Doctrine_Connection_Statement'))
> > > > in SF_ROOT_DIR\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib
> > > > \vendor\doctrine\Doctrine\Connection\Statement.php line 269 ...
> > > > at Doctrine_Connection_Statement->execute(array('new',
> > > > 'waitingforuser'))
> > > > in SF_ROOT_DIR\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib
> > > > \vendor\doctrine\Doctrine\Connection.php line 1006 ...
> > > > at Doctrine_Connection->execute('SELECT COUNT(*) AS num_results FROM
> > > > ticket t WHERE t.tkstate = ?', array('new', 'waitingforuser'))
> > > > in SF_ROOT_DIR\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib
> > > > \vendor\doctrine\Doctrine\Connection.php line 800 ...
> > > > at Doctrine_Connection->fetchAll('SELECT COUNT(*) AS num_results FROM
> > > > ticket t WHERE t.tkstate = ?', array('new', 'waitingforuser'))
> > > > in SF_ROOT_DIR\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib
> > > > \vendor\doctrine\Doctrine\Query.php line 2108 ...
>
> > > > The problem seems to be in the generated query ... the should be OR
> > > > statement (for this multiple choice), but it looks that it's generated
> > > > classic simple WHERE, and as parameter is send whole array... and
> > > > doctrine is confused of course
>
> > > > Maybe the problem is only in my application.
>
> > > > Did anybody of you ever tried to filter by multiple select?

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

Reply via email to