Skip to content

Commit 589cbe0

Browse files
committed
adding searchable() tests
1 parent ba141e1 commit 589cbe0

File tree

4 files changed

+73
-9
lines changed

4 files changed

+73
-9
lines changed

src/Traits/WithFilters.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,8 +236,15 @@ public function applySearchFilter(Builder $query): Builder
236236
// if the column isn't a relation or if it was previously selected
237237
} elseif (! $hasRelation || $selectedColumn) {
238238

239+
$whereColumn = $selectedColumn ?? $column->column();
240+
241+
// @todo: skip aggregates
242+
if (!$hasRelation && $query instanceof Builder) {
243+
$whereColumn = $query->getModel()->getTable() . '.' . $whereColumn;
244+
}
245+
239246
// we can use a simple where clause
240-
$subQuery->orWhere($selectedColumn ?? $column->column(), 'like', '%' . $search . '%');
247+
$subQuery->orWhere($whereColumn, 'like', '%' . $search . '%');
241248

242249
} else {
243250

tests/DataTableComponentTest.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,20 @@
55
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
66
use Illuminate\Support\Collection;
77
use Rappasoft\LaravelLivewireTables\DataTableComponent;
8+
use Rappasoft\LaravelLivewireTables\Tests\Http\Livewire\PetsAltQueryTable;
89
use Rappasoft\LaravelLivewireTables\Tests\Http\Livewire\PetsTable;
910

1011
class DataTableComponentTest extends TestCase
1112
{
1213
protected DataTableComponent $table;
14+
protected DataTableComponent $tableAltQuery;
1315

1416
public function setUp(): void
1517
{
1618
parent::setUp();
1719

1820
$this->table = new PetsTable();
21+
$this->tableAltQuery = new PetsAltQueryTable();
1922
}
2023

2124
/** @test */
@@ -90,4 +93,16 @@ public function test_search_filter_remove(): void
9093
$this->table->removeFilter('search');
9194
$this->assertEquals(5, $this->table->rows->total());
9295
}
96+
97+
public function test_search_filter_alt_query()
98+
{
99+
$this->tableAltQuery->filters['search'] = 'Cartman';
100+
$this->assertEquals(1, $this->tableAltQuery->rows->total());
101+
}
102+
103+
public function test_search_filter_alt_query_relation()
104+
{
105+
$this->tableAltQuery->filters['search'] = 'Cat';
106+
$this->assertEquals(2, $this->tableAltQuery->rows->total());
107+
}
93108
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
namespace Rappasoft\LaravelLivewireTables\Tests\Http\Livewire;
4+
5+
use Illuminate\Database\Eloquent\Builder;
6+
use Rappasoft\LaravelLivewireTables\DataTableComponent;
7+
use Rappasoft\LaravelLivewireTables\Tests\Models\Pet;
8+
use Rappasoft\LaravelLivewireTables\Views\Column;
9+
10+
class PetsAltQueryTable extends DataTableComponent
11+
{
12+
/**
13+
* @return Builder
14+
*/
15+
public function query() : Builder
16+
{
17+
return Pet::query()->select('pets.name', 'pets.age', 'pets.last_visit', 'species.name', 'breeds.name')
18+
->join('species', 'pets.species_id', '=', 'species.id')
19+
->join('breeds', 'breed_id', '=', 'breeds.id');
20+
}
21+
22+
public function columns(): array
23+
{
24+
return [
25+
Column::make('Name', 'name')
26+
->searchable(),
27+
Column::make('Age', 'age')
28+
->searchable(),
29+
Column::make('Last Visit', 'last_visit')
30+
->searchable(),
31+
Column::make('Species', 'species.name')
32+
->searchable(),
33+
Column::make('Breed', 'breed.name')
34+
->searchable(),
35+
];
36+
}
37+
}

tests/Http/Livewire/PetsTable.php

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,24 @@ class PetsTable extends DataTableComponent
1414
*/
1515
public function query() : Builder
1616
{
17-
return Pet::query()->when($this->getFilter('search'), function (Builder $query, $search) {
18-
$query->where('name', 'like', '%'.$search.'%');
19-
});
17+
return Pet::query()
18+
->with('species')
19+
->with('breed');
2020
}
2121

2222
public function columns(): array
2323
{
2424
return [
25-
Column::make('Name', 'name'),
26-
Column::make('Age', 'age'),
27-
Column::make('Last Visit', 'last_visit'),
28-
Column::make('Species', 'species.name'),
29-
Column::make('Breed', 'breed.name'),
25+
Column::make('Name', 'name')
26+
->searchable(),
27+
Column::make('Age', 'age')
28+
->searchable(),
29+
Column::make('Last Visit', 'last_visit')
30+
->searchable(),
31+
Column::make('Species', 'species.name')
32+
->searchable(),
33+
Column::make('Breed', 'breed.name')
34+
->searchable(),
3035
];
3136
}
3237
}

0 commit comments

Comments
 (0)