Browse Source

Merge branch 'where-like-builder-macros' of mrcat323/laravel-macros into master

Mr. CaT 🐈 1 year ago
parent
commit
ebf3a7ce5b
3 changed files with 74 additions and 0 deletions
  1. 37 0
      app/Providers/Macros/BuilderProvider.php
  2. 1 0
      config/app.php
  3. 36 0
      tests/Unit/BuilderMacrosTest.php

+ 37 - 0
app/Providers/Macros/BuilderProvider.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace App\Providers\Macros;
+
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Support\ServiceProvider;
+
+class BuilderProvider extends ServiceProvider
+{
+    /**
+     * Register services.
+     */
+    public function register(): void
+    {
+        //
+    }
+
+    /**
+     * Bootstrap services.
+     */
+    public function boot(): void
+    {
+        /**
+         * Case sensitive search
+         */
+        Builder::macro('whereLike', function (string $attribute, string $searchTerm) {
+            return $this->orWhere($attribute, 'LIKE', $searchTerm);
+        });
+
+        /**
+         * Case in-sensitive search
+         */
+        Builder::macro('whereILike', function (string $attribute, string $searchTerm) {
+            return $this->orWhere($attribute, 'ILIKE', $searchTerm);
+        });
+    }
+}

+ 1 - 0
config/app.php

@@ -173,6 +173,7 @@ return [
          */
          */
         App\Providers\Macros\ArrayProvider::class,
         App\Providers\Macros\ArrayProvider::class,
         App\Providers\Macros\CollectionProvider::class,
         App\Providers\Macros\CollectionProvider::class,
+        App\Providers\Macros\BuilderProvider::class,
     ])->toArray(),
     ])->toArray(),
 
 
     /*
     /*

+ 36 - 0
tests/Unit/BuilderMacrosTest.php

@@ -0,0 +1,36 @@
+<?php
+
+namespace Tests\Unit;
+
+use App\Models\User;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Tests\TestCase;
+
+class BuilderMacrosTest extends TestCase
+{
+    use RefreshDatabase;
+    /**
+     * A basic unit test example.
+     */
+    public function test_where_like_macro(): void
+    {
+        for ($i = 1; $i < 5; $i++) {
+            User::factory()->create(['email' => 'tester@test.com' . $i]);
+        }
+
+        $doUsersExist = User::whereLike('email', 'test%')->exists();
+
+        $this->assertTrue($doUsersExist);
+    }
+
+    public function test_where_ilike_macro(): void
+    {
+        for ($i = 1; $i < 5; $i++) {
+            User::factory()->create(['name' => 'TEsT' . $i]);
+        }
+
+        $doUsersExist = User::whereILike('name', '%es%')->exists();
+
+        $this->assertTrue($doUsersExist);
+    }
+}