Compare commits
1 Commits
main
...
hotfix/yue
| Author | SHA1 | Date | |
|---|---|---|---|
| afba266c0e |
@ -76,10 +76,13 @@ final class LedgerRemarkFilter
|
||||
if ($plan['prefixes'] !== [] || $plan['excludes'] !== []) {
|
||||
$sub->where(function (Builder $scope) use ($plan, $storeLike, $storeNotLike): void {
|
||||
if ($plan['prefixes'] !== []) {
|
||||
// 本平台前缀的店铺
|
||||
// 同平台可能有多个店铺名前缀(如阿里巴巴 = 阿里巴巴 / 1688 / 新佰广),
|
||||
// 任意一个前缀命中即可,不能把多个 LIKE 条件用 AND 串起来。
|
||||
$scope->orWhere(function (Builder $own) use ($plan, $storeLike): void {
|
||||
foreach ($plan['prefixes'] as $prefix) {
|
||||
$storeLike($own, $prefix);
|
||||
$own->orWhere(function (Builder $one) use ($storeLike, $prefix): void {
|
||||
$storeLike($one, $prefix);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -3,7 +3,9 @@
|
||||
namespace Tests\Unit\EcommerceFinance;
|
||||
|
||||
use Illuminate\Database\Query\Builder;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Modules\EcommerceFinance\Services\LedgerRemarkFilter;
|
||||
use Tests\TestCase;
|
||||
|
||||
@ -59,4 +61,38 @@ class LedgerRemarkFilterTest extends TestCase
|
||||
$this->assertSame($before, $query->toSql());
|
||||
$this->assertSame([], $query->getBindings());
|
||||
}
|
||||
|
||||
public function test_multiple_store_prefixes_for_the_same_platform_match_with_or(): void
|
||||
{
|
||||
Schema::create('ledger_filter_regression_rows', function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->string('store_name');
|
||||
$table->string('bill_item');
|
||||
});
|
||||
|
||||
try {
|
||||
DB::table('ledger_filter_regression_rows')->insert([
|
||||
['store_name' => '新佰广1688', 'bill_item' => '订单收入'],
|
||||
['store_name' => '天猫-测试店', 'bill_item' => '订单收入'],
|
||||
]);
|
||||
|
||||
$query = DB::connection()->table('ledger_filter_regression_rows');
|
||||
LedgerRemarkFilter::applyGroups(
|
||||
$query,
|
||||
[[
|
||||
'platform' => '阿里巴巴',
|
||||
'prefixes' => ['阿里巴巴', '1688', '新佰广'],
|
||||
'excludePrefixes' => [],
|
||||
'items' => ['订单收入'],
|
||||
]],
|
||||
'bill_item',
|
||||
static fn (Builder $sub, string $prefix) => $sub->where('store_name', 'like', $prefix . '%'),
|
||||
static fn (Builder $sub, string $prefix) => $sub->where('store_name', 'not like', $prefix . '%'),
|
||||
);
|
||||
|
||||
$this->assertSame(['新佰广1688'], $query->pluck('store_name')->all());
|
||||
} finally {
|
||||
Schema::dropIfExists('ledger_filter_regression_rows');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user