Skip to content

Commit 88e7d3a

Browse files
committed
add general search
1 parent ddb8636 commit 88e7d3a

File tree

6 files changed

+42
-7
lines changed

6 files changed

+42
-7
lines changed

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,13 @@ class Order extends Model
5151
$this->addFields(['source', 'subsource', 'order_date']);
5252
// field from relation
5353
$this->addFields(['channel.created_at' => 'channel_create'])->setDatatype('date');
54+
$this->addField('orderLines.product.sku', 'product_sku');
5455
// field from relation count
5556
$this->addCountField('orderLines');
5657
// custom field (raw sql)
5758
$this->addCustomField('my_total', '(shipping_cost + subtotal)');
59+
// enable general search
60+
$this->addGeneralSearch(['source', 'orderLines.product.sku'], 'startsWith');
5861
}
5962

6063
// customize field filter by custom scope
@@ -167,6 +170,12 @@ You can add fields to a model by using 4 functions:
167170
$this->addCustomField('line_subtotal', '(`price` + `quantity`)', 'orderLines'); // inside "orderLines" relation
168171
```
169172

173+
## General Search
174+
You can enable general search on some fields, and you can specify the operator (`startsWith` is the default operator)
175+
```php
176+
$this->addGeneralSearch(['source', 'orderLines.product.sku'], 'startsWith');
177+
```
178+
170179
## Conjunction
171180
Currently, the package support one conjunction between all fields
172181
`and` | `or`, default conjunction attribute in the config file `default_conjunction`

phpunit.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@
2020
</whitelist>
2121
</filter>
2222
<php>
23-
<env name="DB_CONNECTION" value="sqlite"/>
24-
<env name="DB_DATABASE" value=":memory:"/>
25-
<!-- <env name="DB_CONNECTION" value="mysql"/>-->
26-
<!-- <env name="DB_DATABASE" value="advanced_filter"/>-->
27-
<!-- <env name="DB_PASSWORD" value="password"/>-->
23+
<!-- <env name="DB_CONNECTION" value="sqlite"/>-->
24+
<!-- <env name="DB_DATABASE" value=":memory:"/>-->
25+
<env name="DB_CONNECTION" value="mysql"/>
26+
<env name="DB_DATABASE" value="advanced_filter"/>
27+
<env name="DB_PASSWORD" value="password"/>
2828
<env name="DB_USERNAME" value="root"/>
2929
<env name="DB_PORT" value="3306"/>
3030
<env name="CACHE_DRIVER" value="array"/>

src/Fields/HasFields.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public function addCustomField(string $alias, string $sqlRaw, $relation = null)
8787

8888
public function addGeneralSearch(array $fields, string $operator = null)
8989
{
90-
$this->generalSearch = ['fields' => $fields, $operator => $operator];
90+
$this->generalSearch = ['fields' => $fields, 'operator' => $operator];
9191
}
9292

9393
/**

src/HasFilter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ private function applyGeneralSearch(Builder $builder, FilterRequest $filterReque
9292
foreach ($this->generalSearch['fields'] as $fieldName) {
9393
$field = new Field($builder->getModel(), $fieldName);
9494

95-
$this->filterField($builder, $field, $operator, $filterRequest->getGeneralSearch());
95+
$this->filterField($builder, $field, $operator, $filterRequest->getGeneralSearch(), 'or');
9696
}
9797
});
9898
}

tests/GeneralSearchTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
4+
namespace AsemAlalami\LaravelAdvancedFilter\Test;
5+
6+
7+
use AsemAlalami\LaravelAdvancedFilter\Test\Models\Order;
8+
use Illuminate\Http\Request;
9+
10+
class GeneralSearchTest extends TestCase
11+
{
12+
/** @test */
13+
public function general_search()
14+
{
15+
$queryFilters = 'query=64759';
16+
$request = Request::create("test?{$queryFilters}");
17+
18+
$orders = Order::filter($request)->get();
19+
20+
$this->assertCount(2, $orders);
21+
22+
$this->assertEquals(['LAF_0002', 'LAF_0003'], $orders->pluck('reference')->toArray());
23+
}
24+
}

tests/Models/Order.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,5 +62,7 @@ public function setupFilter()
6262
$this->addField('orderLines.product_id', 'product_id');
6363
$this->addField('orderLines.product.name', 'product_name');
6464
$this->addField('orderLines.product.sku', 'product_sku');
65+
66+
$this->addGeneralSearch(['reference', 'orderLines.product.sku']);
6567
}
6668
}

0 commit comments

Comments
 (0)