DatatablesBundle icon indicating copy to clipboard operation
DatatablesBundle copied to clipboard

DateRangeFilter overwrites other filter

Open golebiowska opened this issue 6 years ago • 5 comments

Hi! I think I found a bug, but I'm not certain. I have a table with filters: screenshot_2

When I write a name the result is ok, but next when I choose date range in 'last seen' column (which is accurate to my result) it's returning 'no results'. The name parameter is overwritten by parameter from range: screenshot_3

Everything works fine when I overwrite addAndExpression method from DateRangeFilter class like this: screenshot_1

golebiowska avatar Jul 04 '18 12:07 golebiowska

i have same situation.

part of datatable :

  ->add('status', Column::class, array(
                'title' => 'Rodzaj',
                'width'=>'10%',
                'filter' => array(Select2Filter::class, array(
                    'search_type' => 'eq',
                    'multiple'=>true,
                    'select_options' => Status::getStatuses(),
                ))
            ))
            ->add('timeTables.fromDate', Column::class, array(
                'title' => 'Termin',
                'width'=>'100px',
                'default_content'=>'',
                'data' => 'timeTables[, ].fromDate',
                'filter' => array(DateRangeFilter::class, array()),
            ))

when i select timeTables.fromDate i get correct query and parameters

ArrayCollection {#39161 ▼
    -elements: array:2 [▼
      0 => Parameter {#39181 ▼
        -name: "101"
        -value: "2018-07-01 00:00:00"
        -type: 2
      }
      1 => Parameter {#39188 ▼
        -name: "102"
        -value: "2018-07-31 23:59:59"
        -type: 2
      }
    ]
  }
  1 => "SELECT partial meet.{id,name,created,status,childrenCounter}, partial timeTables.{id,fromDate}, partial profile.{id}, partial profile_country.{id}, partial tags.{id,title} FROM Mea\MountMeetBundle\Entity\Meet meet LEFT JOIN meet.timeTables timeTables LEFT JOIN meet.profile profile LEFT JOIN profile.country profile_country LEFT JOIN meet.tags tags WHERE meet.name LIKE ?101 AND (timeTables.fromDate BETWEEN ?101 AND ?102) ORDER BY meet.id desc 

when i select status or any other field query is ok, but when i select timeTables.fromDate + any field - timeTables.fromDate override parameters.


 ArrayCollection {#18674 ▼
    -elements: array:2 [▼
      0 => Parameter {#18694 ▼
        -name: "101"
        -value: "2018-07-01 00:00:00"
        -type: 2
      }
      1 => Parameter {#18701 ▼
        -name: "102"
        -value: "2018-07-31 23:59:59"
        -type: 2
      }
    ]
  }
  1 => "SELECT partial meet.{id,name,created,status,childrenCounter}, partial timeTables.{id,fromDate}, partial profile.{id}, partial profile_country.{id}, partial tags.{id,title} FROM Mea\MountMeetBundle\Entity\Meet meet LEFT JOIN meet.timeTables timeTables LEFT JOIN meet.profile profile LEFT JOIN profile.country profile_country LEFT JOIN meet.tags tags WHERE meet.status = ?101 AND (timeTables.fromDate BETWEEN ?101 AND ?102) ORDER BY meet.id desc ◀"

WHERE meet.status = ?101 use same param as timeTables.fromDate = (timeTables.fromDate BETWEEN ?101 AND ?102)

grekpg avatar Jul 06 '18 08:07 grekpg

Same problem here, another way around this is moving the date column to the first position so filters doesn't get overwritten.

newradius avatar Aug 29 '18 05:08 newradius

Any ideas ?

grekpg avatar Oct 05 '18 08:10 grekpg

This should be fixed !

RefreshMyMind avatar Oct 25 '18 21:10 RefreshMyMind

Same issue here.

Does adding $parameterCounter += 1; solve this issue? Than we need to file a Pull Request.

stephanvierkant avatar Dec 05 '18 15:12 stephanvierkant