diff --git a/composer.json b/composer.json index 94b049785..9f605c667 100644 --- a/composer.json +++ b/composer.json @@ -34,7 +34,8 @@ "phpunit/phpunit": "^10.3", "orchestra/testbench": "^8.0", "mockery/mockery": "^1.4.4", - "doctrine/coding-standard": "12.0.x-dev" + "doctrine/coding-standard": "12.0.x-dev", + "spatie/laravel-query-builder": "^5.6" }, "replace": { "jenssegers/mongodb": "self.version" diff --git a/src/Eloquent/Model.php b/src/Eloquent/Model.php index c4c73d67d..bbd45a32b 100644 --- a/src/Eloquent/Model.php +++ b/src/Eloquent/Model.php @@ -577,6 +577,12 @@ public function newEloquentBuilder($query) return new Builder($query); } + /** @inheritdoc */ + public function qualifyColumn($column) + { + return $column; + } + /** @inheritdoc */ protected function newBaseQueryBuilder() { diff --git a/tests/ExternalPackageTest.php b/tests/ExternalPackageTest.php new file mode 100644 index 000000000..f72842874 --- /dev/null +++ b/tests/ExternalPackageTest.php @@ -0,0 +1,50 @@ + 'Jimmy Doe', 'birthday' => '2012-11-12', 'role' => 'user'], + ['name' => 'John Doe', 'birthday' => '1980-07-08', 'role' => 'admin'], + ['name' => 'Jane Doe', 'birthday' => '1983-09-10', 'role' => 'admin'], + ['name' => 'Jess Doe', 'birthday' => '2014-05-06', 'role' => 'user'], + ]); + + $request = Request::create('/users', 'GET', ['filter' => ['role' => 'admin'], 'sort' => '-birthday']); + $result = QueryBuilder::for(User::class, $request) + ->allowedFilters([ + AllowedFilter::exact('role'), + ]) + ->allowedSorts([ + AllowedSort::field('birthday'), + ]) + ->get(); + + $this->assertCount(2, $result); + $this->assertSame('Jane Doe', $result[0]->name); + } +} diff --git a/tests/ModelTest.php b/tests/ModelTest.php index ef25ebaef..9f230de09 100644 --- a/tests/ModelTest.php +++ b/tests/ModelTest.php @@ -25,6 +25,7 @@ use MongoDB\Laravel\Tests\Models\Item; use MongoDB\Laravel\Tests\Models\MemberStatus; use MongoDB\Laravel\Tests\Models\Soft; +use MongoDB\Laravel\Tests\Models\SqlUser; use MongoDB\Laravel\Tests\Models\User; use function abs; @@ -58,6 +59,17 @@ public function testNewModel(): void $this->assertEquals('_id', $user->getKeyName()); } + public function testQualifyColumn(): void + { + // Don't qualify field names in document models + $user = new User(); + $this->assertEquals('name', $user->qualifyColumn('name')); + + // Qualify column names in hybrid SQL models + $sqlUser = new SqlUser(); + $this->assertEquals('users.name', $sqlUser->qualifyColumn('name')); + } + public function testInsert(): void { $user = new User();