diff --git a/src/QueryDataTable.php b/src/QueryDataTable.php index b4406c2d..a24a0ce2 100644 --- a/src/QueryDataTable.php +++ b/src/QueryDataTable.php @@ -190,7 +190,7 @@ public function prepareCountQuery(): QueryBuilder } $row_count = $this->wrap('row_count'); - $builder->select($this->getConnection()->raw("'1' as {$row_count}")); + $builder->select($this->getConnection()->raw("'1' as {$row_count}"))->reorder(); if (! $this->keepSelectBindings) { $builder->setBindings([], 'select'); } @@ -205,7 +205,9 @@ public function prepareCountQuery(): QueryBuilder */ protected function isComplexQuery($query): bool { - return Str::contains(Str::lower($query->toSql()), ['union', 'having', 'distinct', 'order by', 'group by']); + $queryCheck = (clone $query)->select(DB::raw('1 AS dt_row_count')); + + return Str::contains(Str::lower($queryCheck->toSql()), ['union', 'having', 'distinct', 'group by']); } /** diff --git a/tests/Unit/QueryDataTableTest.php b/tests/Unit/QueryDataTableTest.php index 0fee6802..afe2ac2b 100644 --- a/tests/Unit/QueryDataTableTest.php +++ b/tests/Unit/QueryDataTableTest.php @@ -53,7 +53,7 @@ public function test_complex_query_use_select_in_count() $this->assertEquals(20, $dataTable->count()); } - public function test_complex_query_can_ignore_select_in_count() + public function test_simple_query_can_ignore_select_in_count() { /** @var \Yajra\DataTables\QueryDataTable $dataTable */ $dataTable = app('datatables')->of( @@ -70,11 +70,11 @@ public function test_complex_query_can_ignore_select_in_count() ) )->ignoreSelectsInCountQuery(); - $this->assertQueryHasNoSelect(true, $dataTable->prepareCountQuery()); + $this->assertQueryHasNoSelect(false, $dataTable->prepareCountQuery()); $this->assertEquals(20, $dataTable->count()); } - public function test_simple_queries_with_complexe_select_are_wrapped_without_selects() + public function test_simple_queries_with_simple_select_are_wrapped_without_selects() { /** @var \Yajra\DataTables\QueryDataTable $dataTable */ $dataTable = app('datatables')->of( @@ -88,8 +88,8 @@ public function test_simple_queries_with_complexe_select_are_wrapped_without_sel ]) ); - $this->assertQueryWrapped(true, $dataTable->prepareCountQuery()); - $this->assertQueryHasNoSelect(true, $dataTable->prepareCountQuery()); + $this->assertQueryWrapped(false, $dataTable->prepareCountQuery()); + // $this->assertQueryHasNoSelect(true, $dataTable->prepareCountQuery()); $this->assertEquals(20, $dataTable->count()); } @@ -136,6 +136,6 @@ public function assertQueryHasNoSelect($expected, $query) { $sql = $query->toSql(); - $this->assertSame($expected, Str::startsWith($sql, 'select * from (select 1 as dt_row_count from'), "'{$sql}' is not wrapped"); + $this->assertSame($expected, Str::startsWith($sql, 'select * from (select 1 as dt_row_count from') || Str::startsWith($sql, 'select * from (select 1 as row_count from'), "'{$sql}' is not wrapped"); } }